起因
生产环境的java程序,呈现了cpu应用到了1500%的性能问题,而本人对于虚拟机工具的使用又不是很相熟,所以写这个记录下java自带工具的用处。
PID和端口的分割
- pid不是端口,是Process ID过程号的意思
- 过程号是零碎调配给过程的身份标识符,程序一运行,零碎就给一个举世无双的pid,程序运行完结,零碎就回收pid
- netstat -ano | findStr 端口号 依据端口号查问PID
虚拟机自带工具
- jps:查看本机java过程信息
- jstack:打印线程的栈信息,制作 线程dump文件
- jmap:打印内存映射信息,制作 堆dump文件
- jhat:内存剖析工具,用于解析堆dump文件并以适宜人浏览的形式展现进去
- jstat:性能监控工具
- jcmd:1.7之后的多功能工具,能够用来导出堆,查看java过程,导出线程信息,执行GC等
- jconsole:繁难的JVM可视化工具
- jvisualvm:性能更弱小的JVM可视化工具
- javap:查看字节码
jps -l
‘
文件内容如下
最后面显示是pid,不是程序监听的端口
jstack PID > 文件名
jmap -dump:format=b,file=文件名 pid
jhat -port 55555 文件名
页面拜访http://localhost:55555/即可查看,内容如下
jstat -gc 文件名 1000 10
以下数值单位均为KB
C:capacity容量
U:use应用
S0:第一个年老代
S1:第二个年老代
E:Eden空间
O:老年代
M:元空间
CCS:压缩类空间区域
YGC:年老代GC
FGC:齐全GC
GCT:GC总耗时
jcmd
jcmd PID help
查问能应用的命令,如下所示
常用命令解析
- Thread.print:打印线程栈信息
- GC.class_histogram:查看零碎中类统计信息
- GC.heap_dump:导出堆信息,与jmap -dump性能一样
- GC.run_finalization:触发finalize()
- GC.run:触发gc()
- VM.uptime:启动工夫
- VM.flags:获取JVM启动参数
- VM.system_properties:获取零碎Properties
jconsole
抉择本人要监控的程序后点击连贯
次要有内存,线程,类,cpu和Mbean监控
jvisualvm
抉择本人要监控的程序后双击
次要有cpu,堆,类,线程等监控,还有采样性能,比jconsole好使