JVM性能监控工具使用说明

JVM性能监控工具使用说明

命令JPS

JPS(Java Virtual Machine Process Status Tool)
1)jps (显示进程ID、主类名)
2)jps -l (显示进程ID、带包的主类名)
3)jps -v (显示进程ID、主类名、jvm参数)
4)jps -lv (显示进程ID、带包的主类名、jvm参数)

命令JSTAT

JSTAT(Java Virtual Machine statistics monitoring Tool)
1)jstat -gc -h3 3609 1000 10 (分析进程id为3609的gc情况,每隔1000ms打印一次记录,打印10次停止,每3行后再次打印指标参数title名称)
2)jstat -gc 3609(通常使用上面命令,持续观察gc状态, 下面有参数解释)
3)jstat -gcutil -h5 3609 1000 20(分析进程id为3609的gc情况,每隔1000ms打印一次记录,打印20次停止,每3行后再次打印指标参数title名称)
4) jstat -gcutil 3609(通常使用上面命令,持续观察gc状态,下面有参数解释)
5)jstat -gccapacity 3609 1000 10(同理,打印的是各个内存空间的容量大小)
6)jstat -class -h5 3609 1000 20(显示加载的class的数量,及所占用的空间信息)
jstat -gc 3609参数名称 参数描述
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC 年轻代中Eden(伊甸园)的容量 (字节)
EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC Old代的容量 (字节)
OU Old代目前已使用空间 (字节)
PC Perm(持久代)的容量 (字节)
PU Perm(持久代)目前已使用空间 (字节)
MC 方法区的容量 (字节)
MU 方法区已使用的空间(字节)
CCSC 压缩类空间容量(字节)
CCSU 压缩类空间目前已使用大小(字节)
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
jstat -gcutil 3609参数 参数含义
S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
O old代已使用的占当前容量百分比
P perm代已使用的占当前容量百分比
M 方法区已使用的占当前容量百分比
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
jstat -class 3609参数 参数含义
Loaded 已经装载的类的数量
Bytes 装载类所占用的字节数
Unloaded 已经卸载类的数量
Bytes 卸载类的字节数
Time 装载和卸载类所花费的时间

JMAP

JMAP(Java Memory Map)
1)jmap -dump:format=b,file=b.txt 3609 (打印了进程3609的堆内存详情,到当前目录的b.txt文件中,需要scp到本地用MAT文件分析,方便直观的定位OOM问题)
   scp [email protected]:/home/appweb/b.txt /home/xijiu/ (使用scp命令从服务器上将dump出的堆详情下载到跳板机上)
   scp [email protected]:/home/xijiu/b.txt ~/ (使用scp命令从跳板机上将文件下载到本地)
   jvisualvm => 文件 => 装入 => 堆Dump(*.hprof,*.*)(mac电脑在iterms命令终端输入jvisualvm打开jvm自带的堆分析工具,双击类名可以打开当前类下所有实例)
 
   
2)jmap -heap 3609 (打印jvm heap的情况,GC算法、堆内存详情)
3)jmap -histo 3609 | head -n 50 (打印输出堆的详情,包括对象数量、对象大小、类名,通常对象太多,一屏很难打印完,通过使用 head -n 50 过滤前50个对象 )
4)jmap -histo:live 3609 | head -n 20 (对比上面命令,只打印当前还存活的对象)
5) jmap -clstats 3609 (打印类加载数据)
6) jmap -F histo 3609 | head -n 20 (-F在服务已死的情况下使用,表示强制输出)
7)jmap -F -dump:format=b,file=a.hprof 3609 (-F在服务已死的情况下使用,表示强制输出)

JSTACK

JSTACK(Java Virtual Machine Stack Trace for Java)用于显示虚拟机的线程快照,jstack命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如请求外部资源导致的长时间等待、线程间死锁、死循环等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
1)jstack -F 3609 | head -n 50 (当正常输出的请求不被响应时,强制输出线程堆栈, 内容太多可以用head命令取前50行数据)
2) jstack -l 3609 (除线程快照外,还打印了锁的附加信息)
3)jstack -m 3609 (如果调用本地方法栈,还显示C++的调用栈)
4) jstack -l 3609 > aa1.log (多次执行该命令,生成文件,来对比前后的线程快照)

PSTREE

PSTREE(pstree命令将所有线程以树状图显示)
1) pstree (显示当前虚拟机上所有的进程)
2) pstree -u appweb (显示指定用户appweb下的进程,其余的就是root下的进程)
3)pstree -apnh (显示进程之间的关系)
4) pstree 2594 (打印进程的线程使用情况)

TOP

TOP(top 查看资源使用情况)
1) top (显示进程信息;在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况;敲击键盘“x”(打开/关闭排序列的加亮效果);默认按照cpu使用率降序排列,通过”shift + >”或”shift + <”可以向右或左改变排序列;)
2) top -c (显示完整命令)
3)top -p 2594 (显示指定的进程信息)
4) top -d 3 -p 2594 (显示进程2594的信息,每隔3秒更新一次数据)
5)top -n 10 -d 1 -p 2594 (每隔1秒更新一次信息,更新10次之后,终止更新并退出)
6) top -Hp 2594 (查看进程内线程资源使用情况)

JVM中系统变量

参数键值对 参数含义
-verbose:gc 开启打印垃圾回收日志
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCDateStamps 输出GC的时间戳形式
-Xloggc:/data/*/gc.log gc日志文件输出路径
-XX:+HeapDumpOnOutOfMemoryError 当JVM发生OOM时,自动生成DUMP文件
-XX:HeapDumpPath 生成DUMP文件的路径,也可以指定文件名称
-Xms2g JVM初始分配的堆内存2G
-Xmx2g JVM最大允许分配的堆内存,按需分配
-XX:NewSize=600m 新生代初始内存的大小,应该小于-Xms的值
-XX:MaxNewSize=750m 新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值
-XX:+UseConcMarkSweepGC 打开此开关后,使用ParNew + CMS + Serial Old 的收集器组合进行内存回收。Serial Old 收集器将作为CMS 收集器出现Concurrent Mode Failure失败后的后备收集器使用
-XX:CMSMaxAbortabl ??
-XX:MetaspaceSize=38m JVM中的Metaspace扩容时触发FullGC的最小阈值
-XX:MaxMetaspaceSize=380m JVM中的Metaspace扩容时触发FullGC的最大阈值

你可能感兴趣的:(JVM性能监控工具使用说明)