前言
前几天中午正在和同事最近聊股市较好,这几天每天都可以喝点肉汤,心里还是挺高兴的;正在这个时候收到了线上告警邮件和运维同学的消息,“你们有服务挂了!”,心里一紧,立马打开电脑看来下线上cat监控大盘,发现很多服务都在报错,根据cat上的监控日志很快发现了其中一个服务内存溢出导致其他调用服务也有问题,竟然已经定位到了出问题的服务,那就简单了,没有是重启解决不了的问题,重启之后很快服务都恢复正常了。几分钟之后又报错了,同样也是这个服务内存溢出,经过排查后发现该服务的堆内存被改小了,好家伙,运维同学不讲武德,搞偷袭,趁我没反应过来调了内存,内存调整回去之后服务就恢复了正常。
事后把线上的快照文件拖了下来分析,发现本身这个项目的代码也有些问题,本文就整理了一下JVM常用的分析工具。
命令行工具
在安装完JDK之后在JAVA_HOME/bin目录下JDK已经提供了很多命令行的工具
可能我们最常用的就是java
、javac
这两个命令,除了这两个命令之外还有提供很多其他的实用工具,本文主要来一起学习对JVM监控诊断工具
虚拟机进程状况工具(jps)
该工具的功能比较单一,与linux中的ps功能类似,用来列出正在运行的虚拟机进程,并显示出运行的主类和进程号
命令格式:jps [option] [hostid]
❝如果需要查看远程机器的jvm进程需要填写
❞hostid
,并且需要使用RMI,比如:rmi://192.168.2.128:12345
常用的选项:
-
-q
: 只显示出虚拟机的进程id(lvmid),省略主类名 -
-m
: 输出启动时传递给主类的参数 -
-l
: 显示出主类的全名,包括jar包路径 -
-v
: 输出虚拟机进程启动时的JVM参数
虚拟机统计信息监控工具(jstat)
用于监控虚拟机运行状态信息的命令行工具,可以提供内存,垃圾收集等运行时的数据
命令格式:jstat [option vmid] [interval [s|ms] [count]]