JDK命令行工具
jps:虚拟机进程状况工具
显示执行主类所在函数的类名,显示本地虚拟机唯一ID(LVMID)
jstat:虚拟机统计信息监视工具
用于监视各种运行信息
显示本地或远程虚拟机进程中:类装载、内存、垃圾收集、JIT编译等运行数据
运行期定位虚拟机性能问题首选工具
jinfo:java配置信息工具
实时查看和调整虚拟机各项参数,也可以使用java -XX:+PrintFlagsFinal
jinfo -sysprops可以将System.getProperties()打印出来
-flag [+|-]name 或者 -flag name=value修改运行期间参数
jmap:java内存映像工具
用于生成堆转储内存快照,使用print参数 或者 -XX:+HeapDumpOnCtrlBreak kill -3
jmap不仅仅是为了dump文件,可以查询finalize执行队列,java堆和永久代信息,空间使用率、当前垃圾回收器
jhat:虚拟机堆转储快照分析工具
用来分析dump文件(一般不用)
jstack:java堆栈跟踪工具
生成虚拟机当前时刻的线程快照(thraddump或javacore文件)
用于分析定位线程出现长时间停顿的原因:死锁、死循环、请求外部资源时间过长
实战中可以使用java.lang.Thread中的getAllStackTraces()获取虚拟机中所有线程的StackTraceElement对象,写个web界面随时查看
JDK可视化工具
JConsole: Java监事和管理控制台
“内存”页:
相当于可视化jstat命令
监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势
“线程”页:
相当于可视化jstack命令
遇到线程停顿,如:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁)
VisualVM:多合一故障处理工具
优点:不需要agent之类的,对应用程序性能影响小
显示虚拟机进程以及进程的配置和环境信息(jps、jinfo)
监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)
dump以及分析堆转储快照(jmap、jhat)
方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法
离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立快照,可将快照发送开发者debug
其他plugins
jdk版本>1.6
profiler页签进行性能分析,一般线上不用
CPU分析可以查看每个方法执行的次数、执行耗时
内存分析统计每个方法关联的对象及这些对象所占的空间
BTrace动态日志跟踪
在不停止目标程序的前提下,动态的加入原本不存在的调试代码(HotSwap技术)
还可以用来进行性能监视、定位连接泄漏、内存泄漏、解决多线程竞争问题