java虚拟机工具的使用

起因

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

PID和端口的联系

  1. pid不是端口,是Process ID进程号的意思
  2. 进程号是系统分配给进程的身份标识符,程序一运行,系统就给一个独一无二的pid,程序运行结束,系统就回收pid
  3. netstat -ano | findStr 端口号 根据端口号查询PID
    image.png

虚拟机自带工具

  • jps:查看本机java进程信息
  • jstack:打印线程的栈信息,制作 线程dump文件
  • jmap:打印内存映射信息,制作 堆dump文件
  • jhat:内存分析工具,用于解析堆dump文件并以适合人阅读的方式展示出来
  • jstat:性能监控工具
  • jcmd:1.7之后的多功能工具,可以用来导出堆,查看java进程,导出线程信息,执行GC等
  • jconsole:简易的JVM可视化工具
  • jvisualvm:功能更强大的JVM可视化工具
  • javap:查看字节码

jps -l

java虚拟机工具的使用_第1张图片
文件内容如下
最前面显示是pid,不是程序监听的端口

jstack PID > 文件名

image.png
java虚拟机工具的使用_第2张图片

jmap -dump:format=b,file=文件名 pid

image.png

jhat -port 55555 文件名

image.png
页面访问http://localhost:55555/即可查看,内容如下
java虚拟机工具的使用_第3张图片

jstat -gc 文件名 1000 10

java虚拟机工具的使用_第4张图片
以下数值单位均为KB
C:capacity容量
U:use使用
S0:第一个年轻代
S1:第二个年轻代
E:Eden空间
O:老年代
M:元空间
CCS:压缩类空间区域
YGC:年轻代GC
FGC:完全GC
GCT:GC总耗时

jcmd

jcmd PID help

查询能使用的命令,如下所示
java虚拟机工具的使用_第5张图片

常用命令解析

  • 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

java虚拟机工具的使用_第6张图片
选择自己要监控的程序后点击连接
java虚拟机工具的使用_第7张图片
主要有内存,线程,类,cpu和Mbean监控

jvisualvm

java虚拟机工具的使用_第8张图片
选择自己要监控的程序后双击
java虚拟机工具的使用_第9张图片
主要有cpu,堆,类,线程等监控,还有采样功能,比jconsole好使

你可能感兴趣的:(java)