前言
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
命令 | 作用 |
---|---|
jps | 基础工具 |
jstack | 查看某个Java进程内的线程堆栈信息 |
jmap | jmap导出堆内存,然后使用jhat来进行分析 |
jhat | jmap导出堆内存,然后使用jhat来进行分析 |
jstat | JVM统计监测工具 |
hprof | hprof能够展现CPU使用率,统计堆内存使用情况 |
jstat
JVM统计监测工具,用来查看各个区内存和GC的情况
基本语法
jstat <option> [-t] [-h] <pid> <interval> <count>
pid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。-t可以在打印的列加上Timestamp列,用于显示系统运行的时间,-h可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头interval是采样时间间隔。count是采样数目。比如下面输出的是GC信息,采样时间间隔为250ms,采样数为6:
option参数:
参数 | 作用 |
---|---|
-gc | GC堆状态 |
-gcutil | GC统计汇总 |
-class | 类加载器 |
-compiler | JIT |
-gccapacity | 各区大小 |
-gccause | 最近一次GC统计和原因 |
-gcnew | 新区统计 |
-gcnewcapacity | 新区大小 |
-gcold | 老区统计 |
-gcoldcapacity | 老区大小 |
-gcpermcapacity | 永久区大小 |
-printcompilation | HotSpot编译统计 |
其中jstat -gcutil 是最常用的命令,例子:
[esv@bz3esvbs0ap1001 ~]$ jstat -gcutil 46924
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 90.62 12.08 77.62 98.34 95.95 3933 225.161 4 1.371 226.533
参数 | 作用 |
---|---|
S0 | 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 |
S1 | 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 |
E | 年轻代中Eden(伊甸园)已使用的占当前容量百分比 |
O | old代已使用的占当前容量百分比 |
P | perm代已使用的占当前容量百分比 |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
FGCT | 从应用程序启动到采样时old代(全gc)gc次数 |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
堆内存 = 年轻代 + 年老代 + 永久代
年轻代 = Eden区 + 两个Survivor区(From和To)