JVM性能监控与故障处理工具
Peng's Blog 只记录和技术相关的东西

JVM性能监控与故障处理工具

2017-08-24
JVM

概述

这一节里面有一句话说得特别好:

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用只是处理数据的手段。

这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照等。工具的话,往下看。

JDK 的命令行工具

能在处理应用程序性能问题、定位故障时发挥很大的作用。

除了jps,其余所有的格式都是:

xxx [option] vmid

jps

注意,不是jsp。如果你对Linux熟悉的话,肯定直到PS指令。嗯,jps就是Java进程的ps,

➜ ~ jps
21272 Launcher
808
21273 MainServer
21279 Jps
➜ ~

它可以加几个参数:

选型 作用
-q 只输出LVMID,省略类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出类的全名,如果进程执行的是jar包,输出jar的路径
-v 输出虚拟机进程启动时JVM参数

jstat

虚拟机统计信息监视工具。可以显示JVM进程中的类加载、内存、垃圾收集、JIT编译等运行数据。

➜ ~ jstat -gc 21273

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

5120.0 5120.0 5102.3 0.0 33280.0 28898.1 87552.0 4847.5 16896.0 16119.3 2048.0 1852.7 2 0.037 0 0.000 0.037

➜ ~ jstat -gcutil 21273

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

99.65 0.00 86.83 5.54 95.40 90.46 2 0.037 0 0.000 0.037

➜ ~

21273通过 jps 找

选项 作用
-class 监视类装载、卸载数量、总空间以及类装载索耗费的时间
-gc 监视Java堆状况
-gcutil 跟-gc类似,但输出格式是百分比
-gcnew 新生代
-gcold 老年代
-compiler 输出JIT编译器编译过的方法、耗时等信息

-gccapacity,只输出最大最小。其它类似。加上 capacity。

jinfo

作用是实时地查看和调整JVM各项参数。

jmap

作用是生成JVM堆存储快照。

jhat

配合jmap,用于分析JVM堆存储快照。

jstack

这个比较常用,主要用于生成JVM当前时刻的线程快照(一般称为threaddump或者javacore文件)。

线程快照就是当前JVM内每一条线程正在执行的方法堆栈的集合。生成线程快照的目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环等。可以知道没有响应的线程在后台做些什么事或者等待着什么资源。

一些选项:

选项 作用
-F 当正常的请求不被响应时,强制输出
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用的到本地方法的话,可以显示C/C++中的堆栈

HSDIS

JIT 生成代码反汇编。是官方推荐的一款插件。

作用是让HotSpot是 -XX:+PrintAssembly 指令调用它来把动态生成的本地代码还原成汇编代码输出,同时还生成了大量的注释,方便我们分析问题。

JDK的可视化

JConsole

java 监视与管理控制台,没用过。

VisualVM

多合一故障处理工具。有需要的时候再学..


下一篇 JVM类加载机制

Comments

评论功能暂停使用,如需跟作者讨论请联系底部的GitHub