java监控排错学习笔记

jvm monitor tool learn

监控集成工具

  • VisualVm
  • jConsole

jdk 监控命令

jps -m -l -v
-m 输出传入main方法的参数
-l 输出main类或jar的全限名
-v 输出传入的jvm参数

/opt/running # jps -lmv
1 bootshiro.jar --spring.profiles.active=prod
97 jdk.jcmd/sun.tools.jps.Jps -lmv -Dapplication.home=/opt/openjdk-12 -Xms8m -Djdk.module.main=jdk.jcmd
jstack -l -e <pid>
-l      长列表,打印附加信息
-e      扩展列表,打印线程附件信息
<pid>   java进程ID,通过jps查看

/opt/running # jstack -l -e 1
2020-02-20 13:17:23
Full thread dump OpenJDK 64-Bit Server VM (12-ea+29 mixed mode, sharing):
  • jmap dump转储堆栈信息
jmap -dump:live,format=b,file=heap.hprof <pid>
-dump:live       转储活动的对象,如果不指定(去掉live)就是所有对象
format=b         二进制格式
file=heap.bin    转储生成文件heap.bin
<pid>            java进程ID

/opt/running # jmap -dump:,format=b,file=heap.hprof 1
Heap dump file created

转储生成的dump文件可以导入VisualVm,jConsole或者jhat命令查看

/opt/running # jhat heap.hprof
Reading from heap.bin...
Dump file created Thu Feb 20 21:29:23 CST 2020
Snapshot read, resolving...
Resolving 660870 objects...
Chasing references, expect 132 dots...
Eliminating duplicate references...
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
通过localhost:7000查看
jstat --help|-options
jstat -<option> [-h<lines>] <vmid> [<interval> [<count>]]
-<option>     选项,通过jstat -options获取
[-h<lines>]   可选项,表示多少行之后再次打印头部信息
<vmid>        监控的java进程ID
[<interval>]  可选项,打印间隔,表示每隔多少ms打印一次信息
[<count>]     可选项,打印次数,表示打印几次就停止

下面表示: 分析进程ID为1的进程的GC情况,2行之后就再次打印头部,每隔2秒打印一次,总打印4次
/opt/running # jstat -gc -h2 1 2000 4
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
2816.0 2816.0  0.0   597.8  22528.0  18711.1   56028.0    33616.4   80680.0 78501.6 9336.0 8607.4   1553    5.452   4      0.757   -          -    6.209
2816.0 2816.0  0.0   597.8  22528.0  18711.1   56028.0    33616.4   80680.0 78501.6 9336.0 8607.4   1553    5.452   4      0.757   -          -    6.209
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
2816.0 2816.0  0.0   597.8  22528.0  18711.1   56028.0    33616.4   80680.0 78501.6 9336.0 8607.4   1553    5.452   4      0.757   -          -    6.209
2816.0 2816.0  0.0   597.8  22528.0  18711.1   56028.0    33616.4   80680.0 78501.6 9336.0 8607.4   1553    5.452   4      0.757   -          -    6.209


查看option选项有哪些可选参数
/opt/running # jstat -options
-class                显示加载的class数量,所占空间,耗时
-compiler             显示编译的数量,失败,失败的内容等信息
-gc                   (频繁)显示GC信息,年轻代,老年代,gc次数等信息
-gccapacity           显示年轻代老年代永久代的内存占用大小等信息
-gccause              (频繁)显示最近一次GC信息和GC原因
-gcmetacapacity       显示元空间容量信息
-gcnew                显示年轻代信息
-gcnewcapacity        显示年轻代信息及占用量
-gcold                显示老年代信息
-gcoldcapacity        显示老年代信息及占用量
-gcutil               显示GC的统计信息
/opt/running # jstat -gc -h2 1 2000 4
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
2816.0 2816.0  0.0   597.8  22528.0  18711.1   56028.0    33616.4   80680.0 78501.6 9336.0 8607.4   1553    5.452   4      0.757   -          -    6.209
jstat -gc 参数解释
S0C 年轻代8:1:1的第一个幸存区
S1C 年轻代8:1:1的第二个幸存区
S0U 第一个幸存区使用大小
S1U 第二个幸存区使用大小
EC 年轻代8:1:1中的伊甸园大小
EU 伊甸园使用大小
OC 老年代大小
OU 老年代使用大小
MC 方法区(元空间)大小
MC 方法区(元空间)使用大小
CCSC 压缩类空间??大小 压缩类
CCSU 压缩类空间使用大小
YGC 发生的young gc次数
YGCT young gc所耗时间
FGC 发生的full gc次数
FGCT full gc所耗时间
CGC 并发垃圾搜集次数(G1垃圾搜集器)
CGCT 并发垃圾搜集耗时
GCT 总耗gc时间

分析java占用cpu或内存高的线程

top
jps
top -Hp <pid>
printf "%x/n" <threadId>
jstack <pid> | grep <threadId>

jvm奔溃hs_err_pid.log分析

  • 默认当前在工作目录,通过 -XX:ErrorFile=/opt/log/hs_err_pid<pid>.log
    设定生成路径
  • 相关文章 JVM致命错误日志(hs_err_pid.log)分析

原文 

https://segmentfault.com/a/1190000021974460

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java监控排错学习笔记

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址