JProfiler是一个商业授权的java剖析工具,主要针对javaee和javase应用程序开发。 它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。 JProfiler的是一个独立的应用程序,但其提供Eclipse和IntelliJ等IDE的插件。 它允许两个内存剖面评估内存使用情况和动态分配泄漏和CPU剖析,以评估线程冲突。 JProfiler直觉式的GUI让你可以找到性能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。 它让你得以对heap walker作资源回收器的root analysis,可以轻易找出内存漏失;heap快照(snapshot)模式让未被参照(reference)的对象、稍微被参照的对象、或在终结(finalization)队列的对象都会被移除;整合精灵以便剖析浏览器的Java外挂功能。 JProfiler可以监视本地和远程的jvm,适合各种操作系统。 常用的功能有: 1.监视对内存占用情况和创建对象实例的数量找出内存泄露。 2.监视占用cpu较多的方法。 3.监视线程的阻塞和死锁。 4.监视gc的耗时。 监视本地jvm需要安装JProfiler的win版本;监视远程的jvm需要在本地安装JProfiler的win版本,在服务端安装JProfiler的Linux版本。 将JProfiler集成到Eclipse IDE: 1、在JProfiler的主菜单中选择Session->IDE integrations。需要注意的是,当执行插件安装时,需要关闭Eclipse。如果通过JProfiler的安装向导执行安装程序,启动Eclipse前需要完成整个安装。 2、选择Eclipse的版本。 3、点击“Integrate”,选择Eclipse所在的文件夹。点击确定。 4、启动eclipse。 5、在Eclipse里配置JProfiler。点击主菜单,->Windows->Customize Perspective->Commands,找到Profile,选中它,再点击OK即可。 6、运行测试,选择你要测试的系统的主类。右击Profile as -> Java Application 运行即可。 <1.监视堆内存的增长情况: 选择左边的Telemetries菜单可以查看堆内存情况。 绿色的为空闲的空间,蓝色为已用空间(这里特指堆内存空间)。 在这里还可以查看堆内存各个区域的空间大小: par Eden Space CMS Old Gen Par Survivor Space -xmx jvm最大可用内存 -xms jvm促使内存,可以与xmx相同 -xmn 年轻代 <2.查看内存中对象的实例数量: 选择Live memory可以查看内存中对象的实例数量,查看内存中对象的数量,找出不能被回收的对象。 通过长时间的观察可以找出没有被释放的对象。 但是不一定数量最多的实例就是泄露,要根据业务情况具体分析。 在这里面可以通过包名过滤,只显示你开发的类,这个功能十分有用。 右键点击所要查看的类,选择Add Selection To Class Tracker选项可以查看实例数量增长趋势图。 <3.查看实例被谁引用: 选择Heap Walker,并点击相机图标开始。 鼠标右键点击选择Use Selected Instances。 服务端JProfiler代理工具(Agent)加载原理: JProfiler的服务端分析代理工具,必须在jvm启动的阶段通过jvm参数来加载。 jdk1.4以前使用jvmpi,1.5以后使用jvmti。 参数如下: 1.4 --> -Xrunjprofiler 1.5 --> -agentlib:jprofilerti 这些参数告诉jvm,加载分析代理工具,后面的字符串取决于你使用的JProfiler库文件的文件名: windows --> jprofilerti.dll Linux/Unix --> libjprofilerti.so 通过加(冒号-jvmpi)和(等号-jvmti)可以将参数传递给分析代理。 windows环境jvm启动参数示例:(目录为JProfiler的安装目录) -agentpath:C:\PROGRA~1\JPROFI~1\bin\windows\jprofilerti.dll=port=8849 Linux环境jvm启动参数示例:(目录为JProfiler的安装目录) -agentpath:/opt/jprofiler7/bin/linux-x86/libjprofilerti.so=port=8849