《深入理解Java虚拟机》读书笔记三

111 阅读2分钟

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技术)

还可以用来进行性能监视、定位连接泄漏、内存泄漏、解决多线程竞争问题