您的位置:首页 > 编程语言 > Java开发

VisualVM——JDK自带的性能分析工具

2012-11-18 14:45 387 查看



引子

这段时间项目新版本要发了,所以跟着QA分析性能测试和压力测试,用了平时不怎么用的很多工具:

jmap :idea:

jmap -heap pid → 查看堆的使用状况信息

jmap -histo:live pid | less → 堆中活动的对象以及大小

jmap -dump:format=b,file=eclipse_heap.bin pid → Dump堆信息
jstat,可以查看很多内容 :idea:

jstat -gcutil -h 20 pid 1000 100 → 查看Java进程GC的情况,1000ms统计一次gc情况统计100次
jstack,查看jvm线程运行状态,是否有死锁现象等等信息

jstack pid → Dump线程信息
jinfo,查看jvm配置信息
jps
jconsole,图形界面。可以持续收集内存、线程信息,并以曲线的方式显示出来。

# 这个工具真正要做的功能是查看JMX Bean的信息,性能分析中并不关心JMX信息。
mat :idea: ,分析内存Dump,查找内存泄漏。http://www.eclipse.org/mat/

JProfiler,商业 :evil: Profile工具。查看内存、CPU的使用,强劲

VisualVM在JDK1.6 Update7之后的版本中推出,就放在bin目录下面。

VisualVM在的官方网站在 https://visualvm.dev.java.net 。JDK1.6 Update7之前的版本可以单独下载使用。

VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。

内存信息
线程信息
Dump堆(本地进程)
Dump线程(本地进程)
打开堆Dump。堆Dump可以用jmap来生成。
打开线程Dump
生成应用快照(包含内存信息、线程信息等等)
性能分析。 :idea: CPU分析(各个方法调用时间),内存分析(各类对象占用的内存)
……





PS:

跟着QA做性能测试和压力测试,很多收获和感触。

虽然有UI工具,尤其是商业的工具如JProfiler,功能异常强大,但是命令行工具还是非常有市场的。

线上出问题时,命令行能方便和快速的Dump出Heap信息线程信息,然后再对Dump分析;或是JVM信息,如GC次数、JVM参数。命令行对目标的产生的压力小,UI工具可能无法连上。

JDK自带命令行是环境标配的,你总是可以使用。UI可能要安装,等装好,菜都凉了。

往往是对工具的不了解才不能解决问题,JDK自带的工具已经可以解决很多问题了。强大的商业工具往往只是增加学习难度。
只有测试得出的结果才是可信的,之前的推测往往不可靠的。
系统地收集和保证数据,这样当发现问题时,就有更可以用作判断的信息。

参考资料:

好用的性能分析工具–VisualVM
可与jprofiler/yourkit媲美的java诊断工具Visualvm

visualvm的官方网站: https://visualvm.dev.java.net/download.html 一个Eclipse插件,启动时附带启动visualvm来作性能分析:https://visualvm.dev.java.net/eclipse-launcher.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: