JVM常见问题排查系列【001】常见服务器端命令以及相应功能描述
本文命令摘自:深入理解JVM虚拟机
JVM常见排查命令:
名称 | 主要作用 |
jps | JVM Proces status Tool,显示指定系统内所有的HotSpot虚拟进程 |
jstat | JVM Statistics Monitoring Tool ,用于手机HotSpot 虚拟机各方面的运行数据 |
jinfo | Configuration info for java ,显示虚拟机配置信息 |
jmap | Memory Map for java ,生成虚拟机的内存转储快照(heapdump文件) |
jhat | JVM Heap Dump Browser ,用于分析heapdump 文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果 |
jstack | Stack Trace for java ,显示虚拟机的线程快照 |
1. JPS命令解析 以及使用样例
命令格式:
jps [options] [hostid]
jps 执行样例:
其实最主要的是拿到相应JAR的相应的进程的pid
有可能拿不到,这种状况一般的情况是权限不足,找运维人员申请相应的权限就行了
通过上图可以看出,jar包的启动的参数,堆的设置,端口号的设置,
jps工具主要选项描述:
选项 | 作用 |
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动的时候传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是jar包,输出jar路径 |
-v | 输出虚拟机进程启动的时候JVM 参数 |
2.jstat :虚拟机统计信息监视工具
作用描述:显示虚拟机进程中的类的装载,内存,垃圾收集,JIT编译等运行数据,生产服务器排查问题的首选工具
jstat 命令格式:
jstat [option vmid [interval [s|sm][ count]]]
对于命令格式中的VMID,与LVMID需要进行特别说明一下:
如果是本机虚拟机进程,VMID和LVMID一致,如果是远程虚拟机进程,那VMID的格式应当是:
[protocol:][//]lvmid[@hostname][:port]/servername]
参数interval 和count 代办查询间隔和次数,如果省略这两个参数,说明只查询一次。
假设 需要每250毫秒查询一次进程29919 垃圾收集情况,一共查询20此,那命令应当是:
jstat -gc 29919 250 20
如下图:
选项 option 代办这用户希望查询的虚拟机信息,主要分为3类:类装载,垃圾收集,运行编译情况,具体选项以及作用如下图描述
选项 | 作用 |
-class | 监视类装载,卸载数量,总空间以及类装载所耗费的时间 |
-gc |
监视JAVA堆情况,包括Eden区,两个Surivor区,老年代、永久代等的容量,已用空间,GC时间合计等信息 |
-gccapacity | 监视内容与-gc 基本相同,但是输出主要关注Java堆各个区域使用到最大,最小空间, |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutils功能意义,但是会额外输出导致上上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间 |
-gcold | 监视老年代GC状况 |
-gcoldcapcity | 监视内容与-gcold基本相同,输出主要关注使用到的最大,最小空间 |
-gcpermcapacity | 输出永久代使用的最大,最小空间 |
-compiler | 输出JIT编译器编译过的方法,耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
抽个有代表性的
上图结果表明:这台服务器的新生代Eden区(E,表示Eden)使用了65.48%的空间,两个Surivor区(S0,S1,表示Survivor0,Survivor1)其中survivor1 100%,老年代(O,表示Old)使用了17.18%。程序运行依赖工发生 Minor GC (YGC ,表示Young GC)25次, YGCT代办 耗时:1.075秒。发生Full GC (FGC,表示 Full GC)2次,FGCT 代表Full GC 总耗时 0.051秒,所有GC总耗时 (GCT)1.126秒
后续命令 ,且看下节分享