1.JDK命令行工具
开发人员肯定知道java.exe和javac.exe
今天介绍一些jvm性能监控常用命令
1.1 jps
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
jps -l 输出主类的全名,如果执行程序是jar包,输出jar的路径
-v 输出虚拟机进程启动时jvm参数
-q只输出LVMID,省略主类名称
-m输出虚拟机启动时传递给main()函数的参数
1.2 jstat
JVM Statistics Monitoring Tool
用于收集HotSpot虚拟机各方面的运行数据
在项目中一般使用
jstat -gc 进程号 5000(毫秒) 20 ( 说明:每5秒刷新一次,二十次后停止)
-gcutil 百分比
S0 S1 表示suervivor区survivor1,survivor2
E表示eden区
O表示老年代
M metaspace 元空间
CCS 内存池Compressed class space 压缩类空间
YGC 年轻代gc次数
YGCT 年轻代gc时间
FGC full gc 次数
FGCT full gc 时间
其他命令行参数:
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gcnew监视新生代GC
-gcold监视老年代GC
-gcpermcapacity输出永久代使用到最大、最新空间
-compiler输出JIT编译器编译过的方法,耗时信息
1.3 jinfo
Configuration info for java
显示虚拟机配置信息
实时查看和调整虚拟机各项参数
jinfo -flag
Jinfo -flag 进程号 默认jvm信息
-flags 表示查看所有参数信息
直接查看
Linux (64位虚拟机)下面默认1.9g 新生代 700m
1.4 jmap
Memory Map for Java
生成虚拟机的内存转存储快照heapdump文件或者dump文件
jmp -dump:format=b,file=文件名 pid进程号
jdk自带jhat配合jmap进行使用,可以分析dump文件,但是一般会用专业的工具进行分析,后面会提到。
jmap -heap 进程号
显示java堆详细信息,使用哪种回收器、参数配置、分代状况等等
1.5 jstack
Stack Trace for Java
显示虚拟机的线程快照,该命令用于生成虚拟机当前时刻的线程快照(threaddump卓和javacore文件)。
-F 当正常输出的请求未响应时,强制输出线程中的堆栈
-l 除堆栈信息外,显示关于锁的附加信息
-m 如果调用本地方法,可以显示C/C++的堆栈
2.可视化监控工具
2.1 jconsole
jdk自带,双击使用
注意:如果是远程连接 需要配置jvm的jmx参数信息
linux环境下,可以vim .bash_profile文件
JAVA_OPTS='-Djava.rmi.server.hostname=192.168.1.87 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false'
export JAVA_OPTS
java $JAVA_OPTS -jar xxx.jar 启动jar包即可,关闭防火墙
输入地址:端口号 端口号为java_opts中 设置的端口号
内存监控界面可以理解为jstat -gc
2.2 visualvm(推荐)
该工具需要自行在网上下载,免费软件。
线程
这里只介绍该工具分析dump文件
点击File,Load 选中dump文件