虚拟机性能监控和故障处理工具

jdk 的bin目录下面附带了很多小工具来帮助我们对jvm进行监控和分析,下面主要分析几种常见的工具

名称     作用
jps JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 
jstat JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 
jinfo Configuration Info for Java,现实虚拟机配置信息
jmap Memory map for java,生成虚拟机的内存转储快照
jhat JVM heap Dunp Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务,让用户可通过浏览器查看 
jstack Stack Track for java ,显示虚拟机线程快照

 

 

 

 

 

 

 

 

 

 

一、JPS(Java Process Status Tool)

    主要是可以找到想要监控的相关进程的Id和虚拟机进程启动时JVM参数,如果执行jps命令没有反应,可以执行source /etc/profile试一试

  

    例子: 

    

 

二、jstat :虚拟机统计信息监控工具

    

    

  例子:

    

  结果说明:  

Loaded 类装载数量
Bytes 类装载总空间、类卸载总空间
Unloaded 类卸载数量
Time 类装载所耗费的时间
S0C 新生代中Survivor space中S0当前容量的大小(KB)
S1C 新生代中Survivor space中S1当前容量的大小(KB)
S0U 新生代中Survivor space中S0容量使用的大小(KB)
S1U 新生代中Survivor space中S1容量使用的大小(KB)
EC Eden space当前容量的大小(KB)
EU Eden space容量使用的大小(KB)
OC Old space当前容量的大小(KB)
OU Old space使用容量的大小(KB)
PC(MC) Permanent space(Meta Space)当前容量的大小(KB),在JDK1.8 虚拟机移除了永久代,用元空间代替
PU(MC) Permanent space(Meta Space)使用容量的大小(KB),在JDK1.8 虚拟机移除了永久代,用元空间代替
CCSC 压缩类空间大小
CCSU 压缩类空间使用大小
YGC 从应用程序启动到采样时发生 Young GC 的次数
YGCT 从应用程序启动到采样时 Young GC 所用的时间(秒)
FGC 从应用程序启动到采样时发生 Full GC 的次数
FGCT 从应用程序启动到采样时 Full GC 所用的时间(秒)
GCT T从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
S0 新生代中Survivor space中S0当前使用比例
S1 新生代中Survivor space中S1当前使用比例
E 伊甸园区使用比例
O 老年代使用比例
M 元数据区使用比例
CCS 压缩使用比例
NGCMN 新生代最小容量
NGCMX 新生代最大容量
NGC 当前新生代容量
OGCMN 老年代最小容量
OGCMX 老年代最大容量
OGC 当前老年代大小
MCMN 最小元数据容量
MCMX 最大元数据容量
CCSMN 最小压缩类空间大小
CCSMX 最大压缩类空间大小
LGCC 垃圾回收的原因
GCC 垃圾回收的原因
TT 对象在新生代存活的次数
MTT 对象在新生代存活的最大次数
DSS 期望的幸存区大小
S0CMX 最大新生代中Survivor space中S0大小
S1CMX 最大新生代中Survivor space中S1大小

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、jinfo:java配置信息工具

    

 

四、jmap:java内存映像工具,用于生成堆转储快照

 

  例子和结果说明:

root@VM-16-2-ubuntu:/home/ubuntu# jmap -heap 1491
Attaching to process ID 1491, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.144-b01

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:        #类的初始化配置
   MinHeapFreeRatio         = 40        #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
   MaxHeapFreeRatio         = 70            #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率  
   MaxHeapSize              = 228589568 (218.0MB)  #-XX:MaxHeapSize=设置JVM堆的最大大小
   NewSize                  = 4849664 (4.625MB)     #-XX:NewSize=设置JVM堆的‘新生代’的默认大小    
   MaxNewSize               = 76152832 (72.625MB)    #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
   OldSize                  = 9830400 (9.375MB)    #-XX:OldSize=设置JVM堆的‘老生代’的大小
   NewRatio                 = 2            #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
   SurvivorRatio            = 8             #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
   MetaspaceSize            = 21807104 (20.796875MB)     #-XX:MetaspaceSize=<value>:设置JVM堆的元空间初始大小      
   CompressedClassSpaceSize = 1073741824 (1024.0MB)  #压缩类空间大小
   MaxMetaspaceSize         = 17592186044415 MB       #-XX:MaxMetaspaceSize=512m :设置JVM堆的元空间最大大小  
   G1HeapRegionSize         = 0 (0.0MB)        #G1收集器划分的Region的大小

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 8060928 (7.6875MB)
   used     = 1481128 (1.4125137329101562MB)
   free     = 6579800 (6.274986267089844MB)
   18.374162379319106% used
Eden Space:
   capacity = 7208960 (6.875MB)
   used     = 1406328 (1.3411788940429688MB)
   free     = 5802632 (5.533821105957031MB)
   19.508056640625% used
From Space:
   capacity = 851968 (0.8125MB)
   used     = 74800 (0.0713348388671875MB)
   free     = 777168 (0.7411651611328125MB)
   8.779672475961538% used
To Space:
   capacity = 851968 (0.8125MB)
   used     = 0 (0.0MB)
   free     = 851968 (0.8125MB)
   0.0% used
tenured generation:
   capacity = 17690624 (16.87109375MB)
   used     = 17520224 (16.708587646484375MB)
   free     = 170400 (0.162506103515625MB)
   99.03677789997684% used

13378 interned Strings occupying 1836560 bytes.

五、jhat : 虚拟机对转储快照分析工具,与jmap搭配使用,来分析jmap生成的堆转储快照。

  这个比较少用到

 

六、jstack:java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机每条线程正在执行的方法堆栈集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。

  

 

  上面的都是命令行工具,下面两个是可视化工具

 

七、JConsole:java监视与管理控制台

  

可以监控本地进程和远程进程,本地进程比较简单可以直接选择监控的进程。远程linux上面的java虚拟机进程则需要进行相关的配置。

先修改tomcat的bin目录下面的catalina.sh文件,在Execute The Requested Command 这一行下面增加如下配置

# ----- Execute The Requested Command -----------------------------------------
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote"      #ip为服务器真实ip
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"                #远程端口
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"      #是否需要密码
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/opt/jdk1.8.0_144/jre/lib/management/jmxremote.password"

然后进入/opt/jdk1.8.0_144/jre/lib/management/下,复制一份jmxremote.password.template  ,改名为jmxremote.password,将最后两行的注释放开,同时修改密码。

修改jmxremote.password的文件权限 chmod 600 jmxremote.password jmxremote.access

 然后就可以远程连接了。

下图分别是本地和远程的监控图

八、jvisualvm:多合一故障处理工具

   jvisualvm可视化工具和jconsole一样,也是需要进行上述配置才能远程。监控界面如下

 如果jvisualvm  无法安装插件,则通过下面的链接来下载后安装

  https://visualvm.github.io/pluginscenters.html

 

  

    

原文地址:https://www.cnblogs.com/kyleinjava/p/9673014.html