EJ Technologies JProfiler是一款Java剖析工具,主要用于对jdbc,noSql, jsp, servlet, socket等进行分析,将对CPU、执行线程和内存的剖析组合在一个强大的应用中,方便找到效能瓶颈、内存泄漏,从而解决执行线程的问题,还提供了关于RMI调用、文件、套接字和进程的高级信息。
基本简介
JProfiler是一个全功能的Java剖析工具(profiler),专用于分析J2SE和J2EE应用程序。它把对CPU、执行线程和内存的剖析组合在一个强大的应用中。JProfiler的GUI可以让你方便的找到效能瓶颈、内存泄漏(memory leaks)、并解决执行线程的问题。JProfiler是一个功能强大的工具,您可以使用它以动态的方式分析基于Java的应用程序,并使您能够分析它们,从而优化性能。
软件功能
用于传出请求的HTTP探测;HTTP请求的远程请求跟踪
“内联异步执行”调用树和热点视图的树分析
自动检测将在当前配置的JVM中生成数据的跟踪类型
异步跟踪状态显示在具有相关操作的调用树视图上方
检测非配置类中的调用是否会创建异步调用并提供记录它
Kotlin协同程序的异步跟踪;基于IntelliJ IDEA的全新明暗外观,支持Windows和Linux的HighDPI
jpcontroller的非交互模式;IDE集成的自动过滤器检测
重新组织的会话设置对话框,没有单独的“性能分析设置”对话框
常规设置对话框的“会话默认值”选项卡上的新会话的默认设置
默认设置的“方法呼叫记录”选项卡包括关闭新会话的“检测或采样”问题的选项
在会话设置对话框中从其他会话复制所选设置类别的操作
更简洁,更易读的配置文件格式,不会写入默认设置
在连接到已使用不同设置进行概要分析的JVM时,询问用户是否保留以前的设置
对于脱机分析,如果配置文件仅包含单个会话,则不再需要在-agentpath VM参数中指定会话ID
使用-agentpath VM参数中的“id”或“config”选项现在会自动激活“立即启动”模式
添加了JPROFILER_AGENT_OPTIONS环境变量,以允许在无法修改“-agentpath”VM参数的情况下为代理设置调试参数
触发堆转储”操作:添加了用于记录基元数据的选项
在探针控件对象视图中为嵌套表的详细信息对话框添加了快速搜索功能
servlet探针现在拦截所有Jetty处理程序,增加了对Javalin,Spark和ktor-jetty的支持
在调用树和热点视图的视图设置对话框中添加了“缩短包”选项
支持仅包含java.base模块的JVM的分析
软件特色
1、简单易用,轻松上手
JProfiler简单而强大,配置会话很简单,第三方集成使入门变得轻而易举,并且以自然的方式呈现分析数据。在所有级别上,JProfiler都经过精心设计,可帮助您开始解决问题。
2、QA质检功能全面可靠
很适合作为QA工具,无论是在开发过程中还是专用于QA团队。快照比较功能丰富,可以轻松跟踪进度。对命令行操作具有强大的支持。包括从命令行配置,导出快照数据和创建快照比较的功能。
3、低开销,成本可控
可以使用JProfiler代理启动应用程序,并在以后附加JProfiler GUI。当不记录任何数据时,开销非常小。这就是按需配置。始终可以在高级事件探查器中进行很多调整。JProfiler向您展示了性能分析设置将如何影响性能,并为您提供了用于快速选择常见用例性能分析设置的模板。
4、强大的CPU分析器
解决性能瓶颈是探查器最常见的用例。但是,CPU数据的详细程度可能不堪重负,并且收集数据的方式可能会在可用性方面产生巨大差异。使用JProfiler,在尝试查找问题原因时,您具有决定性的优势。调用树视图过滤器,聚合级别和线程状态选择器只是JProfiler在该领域的多功能性的一些示例。
JProfiler安装破解教程
1.双击jprofiler_windows-x64_12_0_4.exe文件,出现如图界面开始准备安装文件
2.进入安装程序向导界面,选择安装位置,默认的是C盘,选择其它文件夹,选择【自定义安装】
3.阅读软件的许可协议,勾选【我接受协议】,单击【下一步】
4.JProfiler正在安装中,如图
5.安装完成,打开软件,输入序列号即可
JProfiler使用说明
Filter: 什么class需要被分析。分为包含和不包含两种类型的Filter。
Profiling Settings: 收据收集的策略:Sampling和 Instrumentation,一些数据采集细节可以自定义.
Triggers: 一般用于**offline**模式,告知JProfiler Agent 什么时候触发什么行为来收集指定信息.
Live memory: class/class instance的相关信息。 例如对象的个数,大小,对象创建的方法执行栈,对象创建的热点。
Heap walker: 对一定时间内收集的内存对像信息进行静态分析,功能强大且使用。包含对象的outgoing reference, incoming reference, biggest object等
CPU views: CPU消耗的分布及时间(cpu时间或者运行时间); 方法的执行图; 方法的执行统计(最大,最小,平均运行时间等)
Thread: 当前jvm所有线程的运行状态,线程持有锁的状态,可dump线程。
Monitors & locks: 所有线程持有锁的情况以及锁的信息
Telemetries: 包含heap, thread, gc, class等的趋势图(遥测视图)
JProfiler内存分析教程
1. 初始化检验环境:
切换到“Live Memory-->All Objects”标签,可以看到当前tomcat中的对象情况,注意jprofiler其他版本可能位置不一样.
在执行操作前,需要先F4,运行“Run GC”,使jvm进行内存回收清理无效的对象.为了便于比较内存的增长情况,可以点击右键--->"Mark Current",
来将当前内存使用情况作为参照;点击后会显示“Difference”列,该列会列出对象数量的变化和变化比率
2.打开内存记录:
点击“Start Recordings”按钮,开始记录。执行这步的主要目的是为下面“Heap Walker”设置一个监控区间;如果不记录的话“Heap Walker”将分析jvm虚拟机的所有内存,即耗时又不能准确的发现内存泄漏的原因。
3. 执行操作,执行gc;
使用压力工具访问被测应用,执行完之后再次F4进行GC----这样是为了消除可以回收的对象。执行内存回收后,仍然存在于内存中的对象有可能是泄漏的对象。如下图instance count中红色的部门为不能回收的对象,difference列列出了增加的对象数量和增。以String为例,在该操作中增加了31751个对象增幅达到了14%,随后会在HeapWalker中观察这些对象,分析哪些对象是泄漏的。一般引起泄漏的对象包括:String、char[]、HashMap、Concurrenthashmap等,这类对象需要重点关注下;
4. 关闭内存记录:
点击“Stop Recordings”关闭内存记录,告诉jProfiler把这段记录作为分析对象;
5. 找到增加迅速的对象类型,打开HeapWalker:
在视图中找到增长快速的对象类型,本例Concurrenthashmap的增长速度很快。在memory视图中找到Concurrenthashmap---点右键----选择“Show Selectiion In Heap Walker”,切换到HeapWarker 视图;切换前会弹出选项页面,注意一定要选择“Select recorded objects”,这样Heap Walker会在刚刚的那段记录中进行分析;否则,会分析tomcat的所有内存对象,这样既耗时又不准确;
6. 在HeapWalker中,找到泄漏的对象;
HeapWarker 会分析内存中的所有对象,包括对象的引用、创建、大小和数量;
HeapWarker视图下方可以进行页面切换:
通过切换到References页签,可以看到这个类的具体对象实例。
为了在这些内存对象中,找到泄漏的对象(应该被回收),可以在该对象上点击右键,选择“Use Selected Instances”缩小对象范围;
单击OK按钮
7. 通过引用分析该对象:
在References引用页签中,可以看到该对象的的引用关系,可以切换incoming/outcoming,显示引用的类型:
incoming 表示显示这个对象被谁引用;
outcoming 表示显示这个对象引用的其他对象;
选择“Show In Graph”将引用关系使用图形方式展现;
选中该对象,点击“Show Paths To GC Root”,会找到引用的根节点;
在上图中,我们可以发现,这个HashMap Segment对象最终的引用是在ConcurrentHashMap和ReentranLock对象中;
8. 通过创建分析该对象:
如果第7步还不能定位内存泄露的地方,我们可以尝试使用Allocations页签,该页签显示对象是如何创建出来的;
我们可以从创建方法开始检查,检查所有用到该对象的地方,直到找到泄漏位置;
∨ 展开