乐趣区

关于java:java虚拟机工具的使用

起因

生产环境的 java 程序,呈现了 cpu 应用到了 1500% 的性能问题,而本人对于虚拟机工具的使用又不是很相熟,所以写这个记录下 java 自带工具的用处。

PID 和端口的分割

  1. pid 不是端口,是 Process ID 过程号的意思
  2. 过程号是零碎调配给过程的身份标识符,程序一运行,零碎就给一个举世无双的 pid,程序运行完结,零碎就回收 pid
  3. 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 好使

退出移动版