JDK自带的JVM工具
目录
- jdk自带的jvm工具
- jps 查看jvm进程、jvm参数
- jstat 查看jvm的运行状态
- jinfo 查看jvm参数
- jstack 查看线程快照
- jmap 查看堆的使用情况、生成堆快照
- jhat 分析堆快照
- jconsole jvm状态可视化查看工具
- jvisualvm 更加强大的jvm状态可视化查看工具
- 内存泄漏
虚拟机工具可以分析jvm运行时数据、定位jvm存在的问题。这些工具在jdk的bin目录下,前面的均只作为了解,实际只使用最后2个。
jdk自带的jvm工具
jps 查看jvm进程、jvm参数
#查看正在执行的虚拟机进程,和ps -ef|grep java相似,也可以使用ps -ef | grep xxx代替
#会输出pid,主类显示全限定类名,如果执行的是jar则显示jar的路径
jps -l
#查看jvm参数
jps -v
jstat 查看jvm的运行状态
#pid、间隔多少ms输出1次、输出次数。缺省输出次数时,默认一直输出
jstat -gc 16340 1000 10
- S0C、S1C:第一个、第二个Survivor区的容量(from、to),S是Survivor、C是Capacity
- S0U、S1U:第一个、第二个Survivor区已使用的容量,U是used
- EC、 EU:Eden区的容量、已用容量
- OC、OU:老年代的容量、已用容量,O是old
- MC、MU:方法区的
- CCSC、CCSU:压缩的类空间的
- YGC、YGCT:新生代垃圾回收次数、消耗时间,Y是young,GC就是gc,T是time
- FGC、FGCT:老年代的,FGC是Full GC 老年代GC
- GCT:垃圾回收消耗总时间
jinfo 查看jvm参数
#查看指定进程(pid)的信息,包括操作系统的信息、环境变量、jvm参数等
jinfo 16340
#查看指定进程的全部jvm参数
jinfo -flags 16340
#查看指定进程的指定jvm参数,也可以通过grep过滤得到
jinfo -flag MaxHeapSize 16340
jstack 查看线程快照
线程快照可以定位线程出现长时间停顿的原因,比如线程间死锁、死循环、等待获取锁等
#查看线程快照,包括线程名、线程状态、执行到那个类的哪一行代码、持有的锁
jstack -l 28584 #pid
#检查线程死锁
jstack -m 28584 #pid
eg. 线程死锁时的线程快照:
会列出发生死锁的线程,死锁原因、代码位置
jmap 查看堆的使用情况、生成堆快照
#查看堆的使用情况,包括最大|小堆内存、各年代的使用情况
jmap -heap 28180
# 查看所有的类的实例,包括类名、实例个数、每个实例的大小
# 部分类名会简写,比如B=>byte,C=>char,I=>int
jmap -histo 28180
# 信息很多,可以使用管道命令分页查看
jmap -histo 28180 | more
# 生成堆快照文件。windows路径用\,linux用/
jmap -dump:format=b,file=D:\heap_dump.hprof 28180 #pid
jmap -dump:format=b,file=/usr/local/heap_dump.hprof 28180
#jvm参数,发生OOM异常时自动生成dump文件,可用于复盘、定位问题
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\mall\
jhat 分析堆快照
#默认使用端口7000,访问localhost:7000即可查看堆快照的分析信息
jhat xxx.hprof
#可以-p指定使用的端口
jhat -p 9000 xxx.hprof
jconsole jvm状态可视化查看工具
可以查看本地、远程的jvm运行状态,信息多样
jconsole
#如果检测不到本地jvm进程时,可以手动指定jvm进程的pid
jconsole 17412
jvisualvm 更加强大的jvm状态可视化查看工具
#指定jvm进程的pid
jvisualvm --openpid 17412
#如果提示不能打开指定进程,删除hsperfdata_xxx文件夹后重试,xxx换为自己的用户名
#C:\Users\xxx\AppData\Local\Temp\hsperfdata_xxx
IDEA可安装插件 VisualVM Launcher,设置VisualVM execuatble的路径为jdk bin目录下的jvisualvm.exe,这样就可以直接在IDEA中使用jvisualvm。
内存泄漏
- 堆内存泄漏,常见现象:heap使用量明显上升、经常达到最大堆内存,出现OOM或频繁Full GC。解决方案:dump分析堆快照
- 堆外内存泄漏:heap使用量很低、无明显变化,但出现OOM会频繁Full GC。解决方案:VisualVM -> 工具 -> 插件 -> 可用插件 -> 安装Btrace 进行分析
还没有评论,来说两句吧...