JProfilerѧϰ±Ê¼Ç
---------------------------------------------------------------------------------------------------------------------
תÔØÓÚ£º
http://blog.csdn.net/djy1135/article/details/2304465
--------------------------------------------------------------------------------------------------------------------
Ò»¡¢°²×°JProfiler
´Óhttp://www.ej-technologies.com/ÏÂÔØ5.1.2²¢ÉêÇëÊÔÓÃÐòÁкÅ
¶þ¡¢Ö÷Òª¹¦Äܼò½é
1£®ÄÚ´æÆÊÎöMemory profiler
JProfilerµÄÄÚ´æÊÓͼ²¿·Ö¿ÉÒÔÌṩ¶¯Ì¬µÄÄÚ´æʹÓÃ×´¿ö¸üÐÂÊÓͼºÍÏÔʾ¹ØÓÚÄÚ´æ·ÖÅä×´¿öÐÅÏ¢µÄÊÓͼ¡£ËùÓеÄÊÓͼ¶¼Óм¸¸ö¾Û¼¯²ã²¢ÇÒÄܹ»ÏÔʾÏÖÓдæÔڵĶÔÏóºÍ×÷ΪÀ¬»ø»ØÊյĶÔÏó¡£
- ËùÓжÔÏó
ÏÔʾÀà»òÔÚ×´¿öͳ¼ÆºÍ³ßÂëÐÅÏ¢¶ÑÉÏËùÓжÔÏóµÄ°ü¡£Äã¿ÉÒÔ±ê¼Çµ±Ç°Öµ²¢ÏÔʾ²îÒìÖµ¡£ - ¼Ç¼¶ÔÏóRecord objects
ÏÔʾÀà»òËùÓÐÒѼǼ¶ÔÏóµÄ°ü¡£Äã¿ÉÒÔ±ê¼Ç³öµ±Ç°Öµ²¢ÇÒÏÔʾ²îÒìÖµ¡£ - ·ÖÅä·ÃÎÊÊ÷Allocation call tree
ÏÔʾһ¿ÃÇëÇóÊ÷»òÕß·½·¨¡¢Àà¡¢°ü»ò¶ÔÒÑÑ¡ÔñÀàÓдø×¢Ê͵ķÖÅäÐÅÏ¢µÄJ2EE×é¼þ¡£ - ·ÖÅäÈȵãAllocation hot spots
ÏÔʾһ¸öÁÐ±í£¬°üÀ¨·½·¨¡¢Àà¡¢°ü»ò·ÖÅäÒÑÑ¡ÀàµÄJ2EE×é¼þ¡£Äã¿ÉÒÔ±ê×¢µ±Ç°Öµ²¢ÇÒÏÔʾ²îÒìÖµ¡£¶ÔÓÚÿ¸öÈȵ㶼¿ÉÒÔÏÔʾËüµÄ¸ú×ټǼÊ÷¡£
2£®¶Ñ±éÀúHeap walker
ÔÚJProfilerµÄ¶Ñ±éÀúÆ÷(Heap walker)ÖУ¬Äã¿ÉÒԶԶѵÄ×´¿ö½øÐпìÕÕ²¢ÇÒ¿ÉÒÔͨ¹ýÑ¡Ôñ²½ÖèÏÂÑ°ÕÒ¸ÐÐËȤµÄ¶ÔÏ󡣶ѱéÀúÆ÷ÓÐÎå¸öÊÓͼ£º
- ÀàClasses
ÏÔʾËùÓÐÀàºÍËüÃǵÄʵÀý¡£ - ·ÖÅäAllocations
ΪËùÓмǼ¶ÔÏóÏÔʾ·ÖÅäÊ÷ºÍ·ÖÅäÈȵ㡣 - Ë÷ÒýReferences
Ϊµ¥¸ö¶ÔÏóºÍ¡°ÏÔʾµ½À¬»ø»ØÊÕ¸ùĿ¼µÄ·¾¶¡±ÌṩË÷ÒýͼµÄÏÔʾ¹¦ÄÜ¡£»¹ÄÜÌṩºÏ²¢ÊäÈëÊÓͼºÍÊä³öÊÓͼµÄ¹¦ÄÜ¡£ - Êý¾ÝData
Ϊµ¥¸ö¶ÔÏóÏÔʾʵÀýºÍÀàÊý¾Ý¡£ - ʱ¼äTime
ÏÔʾһ¸ö¶ÔÒѼǼ¶ÔÏóµÄ½â¾öʱ¼äµÄÖù״ͼ¡£
3£®CPUÆÊÎöCPU profiler
JProfilerÌṩ²»Í¬µÄ·½·¨À´¼Ç¼·ÃÎÊÊ÷ÒÔÓÅ»¯ÐÔÄܺÍϸ½Ú¡£Ï̻߳òÕßÏß³Ì×éÒÔ¼°Ïß³Ì×´¿ö¿ÉÒÔ±»ËùÓеÄÊÓͼѡÔñ¡£ËùÓеÄÊÓͼ¶¼¿ÉÒÔ¾Û¼¯µ½·½·¨¡¢Àà¡¢°ü»òJ2EE×é¼þµÈ²»Í¬²ãÉÏ¡£CPUÊÓͼ²¿·Ö°üÀ¨£º
- ·ÃÎÊÊ÷Call tree
ÏÔʾһ¸ö»ýÀÛµÄ×Ô¶¥ÏòϵÄÊ÷,Ê÷Öаüº¬ËùÓÐÔÚJVMÖÐÒѼǼµÄ·ÃÎʶÓÁС£JDBC,JMSºÍJNDI·þÎñÇëÇ󶼱»×¢ÊÍÔÚÇëÇóÊ÷ÖС£ÇëÇóÊ÷¿ÉÒÔ¸ù¾ÝServletºÍJSP¶ÔURLµÄ²»Í¬ÐèÒª½øÐвð·Ö¡£ - ÈȵãHot spots
ÏÔʾÏûºÄʱ¼ä×î¶àµÄ·½·¨µÄÁÐ±í¡£¶Ôÿ¸öÈȵ㶼Äܹ»ÏÔʾ»ØËÝÊ÷¡£¸ÃÈȵã¿ÉÒÔ°´ÕÕ·½·¨ÇëÇó£¬JDBC£¬JMSºÍJNDI·þÎñÇëÇóÒÔ¼°°´ÕÕURLÇëÇóÀ´½øÐмÆËã¡£ - ·ÃÎÊͼCall graph
ÏÔʾһ¸ö´ÓÒÑÑ¡·½·¨¡¢Àà¡¢°ü»òJ2EE×é¼þ¿ªÊ¼µÄ·ÃÎʶÓÁеÄͼ¡£
4£®Ïß³ÌÆÊÎöThread profiler
¶ÔÏß³ÌÆÊÎö£¬JProfilerÌṩÒÔÏÂÊÓͼ:
- Ïß³ÌÀúÊ·Thread history
ÏÔʾһ¸öÓëÏ̻߳ºÍÏß³Ì״̬ÔÚÒ»ÆðµÄ»î¶¯Ê±¼ä±í¡£ - Ï̼߳à¿ØThread monitor
ÏÔʾһ¸öÁÐ±í£¬°üÀ¨ËùÓеĻÏß³ÌÒÔ¼°ËüÃÇÄ¿Ç°µÄ»î¶¯×´¿ö¡£ - ËÀËø̽²âͼ±íDeadlock Detection
ÏÔʾһ¸ö°üº¬ÁËËùÓÐÔÚJVMÀïµÄËÀËøͼ±í¡£ - ĿǰʹÓõļà²âÆ÷Current monitor useage
ÏÔʾĿǰʹÓõļà²âÆ÷²¢ÇÒ°üÀ¨ËüÃǵĹØÁªÏ̡߳£ - ÀúÊ·¼ì²â¼Ç¼History usage history
ÏÔʾÖØ´óµÄµÈ´ýʼþºÍ×èÈûʼþµÄÀúÊ·¼Ç¼¡£ - ¼à²âʹÓÃ״̬Monitor usage statistics
ÏÔʾ·Ö×é¼à²â£¬Ï̺߳ͼà²âÀàµÄͳ¼Æ¼à²âÊý¾Ý¡£
5£®VMÒ£¸Ð¿±²â¼¼ÊõVM telemetry
¹Û²ìJVMµÄÄÚ²¿×´Ì¬£¬JProfilerÌṩÁ˲»Í¬µÄÒ£¸Ð¿±²âÊÓͼ£¬ÈçÏÂËùʾ:
- ¶ÑHeap
ÏÔʾһ¸ö¶ÑµÄʹÓÃ×´¿öºÍ¶Ñ³ß´ç´óС»î¶¯Ê±¼ä±í¡£ - ¼Ç¼µÄ¶ÔÏóRecorded objects
ÏÔʾһÕŹØÓڻ¶ÔÏóÓëÊý×éµÄͼ±íµÄ»î¶¯Ê±¼ä±í¡£ - À¬»ø»ØÊÕGarbage collector
ÏÔʾһÕŹØÓÚÀ¬»ø»ØÊջµÄ»î¶¯Ê±¼ä±í¡£ - ÀàClasses
ÏÔʾһ¸öÓëÒÑ×°ÔØÀàµÄͼ±íµÄ»î¶¯Ê±¼ä±í¡£ - Ïß³ÌThreads
ÏÔʾһ¸öÓ붯̬Ïß³Ìͼ±íµÄ»î¶¯Ê±¼ä±í¡£
Èý¡¢ÊµÕ½
(Ò»)ÈÎÎñÄ¿±ê
ÕÒ³öÏîÄ¿ÖÐÄÚ´æÔö´óµÄÔÒò
£¨¶þ£©ÅäÖÃ˵Ã÷
²Ù×÷ϵͳ£ºWindows2003
WebÈÝÆ÷£ºTomcat5.0.23
JDK°æ±¾£ºsun1.4.2
¼à¿ØÀàÐÍ£º±¾µØ
Jprofiler°²×°Â·¾¶£ºD:/jprofiler5
Tomcat°²×°Â·¾¶£ºD:/Tomcat5
(Èý)²âÊÔÏîÄ¿
1£®Ð½¨WEBÏîÄ¿test
2£®½¨°ücn.test
3£®ÔڸðüϽ¨ÀàÎļþTestMain.javaºÍTestBean.java
package cn.test;
public class TestBean {
String name = "";
}
packagecn.test;
importjava.util.ArrayList;
publicclassTestMain {
publicstaticArrayListlist=newArrayList(); //´æ·Å¶ÔÏóµÄÈÝÆ÷
public static int counter = 0; //×÷ͳ¼ÆÓÃ
}
4.½¨²âÊÔÓõÄJSPÎļþinit1.jsp¡¢init2.jsp
Init1.jsp£¨Ã¿´ÎÖ´Ðж¼´´½¨1Íò¸öTestBean¶ÔÏó£©
<%@pagelanguage="java"import="cn.test.*"pageEncoding="ISO-8859-1"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>init</title>
</head>
<body><%
for(inti=0;i<10000;i++){
TestBean b =newTestBean();
TestMain.list.add(b);
}
%>
SIZE:<%=TestMain.list.size()%><br/>
counter:<%=TestMain.counter++%>
</body>
</html>
Init2.jspºÍinit1.jspһģһÑù¼´¿É£¨ºóÃæÓÐÓã©¡£
(ËÄ)ÅäÖòâÊÔÓÃÀý
1£®µã»÷d:/jprofiler5/bin/jprofiler.exe
2£®Ö´Ðв˵¥Session¨¤Integration Wizards¨¤New ServerIntegration
Ñ¡ÔñÊDZ¾µØ²âÊÔ»