本文共 1933 字,大约阅读时间需要 6 分钟。
虚拟机工具可以分析jvm运行时数据、定位jvm存在的问题。这些工具在jdk的bin目录下,前面的均只作为了解,实际只使用最后2个。
#查看正在执行的虚拟机进程,和ps -ef|grep java相似,也可以使用ps -ef | grep xxx代替#会输出pid,主类显示全限定类名,如果执行的是jar则显示jar的路径jps -l #查看jvm参数jps -v
#pid、间隔多少ms输出1次、输出次数。缺省输出次数时,默认一直输出jstat -gc 16340 1000 10
#查看指定进程(pid)的信息,包括操作系统的信息、环境变量、jvm参数等jinfo 16340#查看指定进程的全部jvm参数jinfo -flags 16340#查看指定进程的指定jvm参数,也可以通过grep过滤得到jinfo -flag MaxHeapSize 16340
线程快照可以定位线程出现长时间停顿的原因,比如线程间死锁、死循环、等待获取锁等
#查看线程快照,包括线程名、线程状态、执行到那个类的哪一行代码、持有的锁jstack -l 28584 #pid#检查线程死锁jstack -m 28584 #pid
eg. 线程死锁时的线程快照:
会列出发生死锁的线程,死锁原因、代码位置
#查看堆的使用情况,包括最大|小堆内存、各年代的使用情况jmap -heap 28180 # 查看所有的类的实例,包括类名、实例个数、每个实例的大小# 部分类名会简写,比如B=>byte,C=>char,I=>intjmap -histo 28180# 信息很多,可以使用管道命令分页查看jmap -histo 28180 | more# 生成堆快照文件。windows路径用\,linux用/jmap -dump:format=b,file=D:\heap_dump.hprof 28180 #pidjmap -dump:format=b,file=/usr/local/heap_dump.hprof 28180
#jvm参数,发生OOM异常时自动生成dump文件,可用于复盘、定位问题-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\mall\
#默认使用端口7000,访问localhost:7000即可查看堆快照的分析信息jhat xxx.hprof#可以-p指定使用的端口jhat -p 9000 xxx.hprof
可以查看本地、远程的jvm运行状态,信息多样
jconsole#如果检测不到本地jvm进程时,可以手动指定jvm进程的pidjconsole 17412
#指定jvm进程的pidjvisualvm --openpid 17412#如果提示不能打开指定进程,删除hsperfdata_xxx文件夹后重试,xxx换为自己的用户名#C:\Users\xxx\AppData\Local\Temp\hsperfdata_xxx
IDEA可安装插件 VisualVM Launcher,设置VisualVM execuatble的路径为jdk bin目录下的jvisualvm.exe,这样就可以直接在IDEA中使用jvisualvm。
转载地址:http://kkhlb.baihongyu.com/