JVM 性能调优监控工具

企业级应用开发中经常会遇到以下问题,可以使用工具对JVM进行监管,以便及时查找问题所在 。
内存不足OutOfMemory(大对象没有gc等),内存泄露;
线程死锁,线程数过多;
锁争用(Lock Contention),资源未及时释放(数据库);
JAVA进程CPU消耗过高.
一、Java自带工具
Java安装目录的bin文件加下有一些工具可以用来监控JVM性能,如jconsole、jvisualvm、jmap、jps、jstack、jhat、jstat等 。
1. jconsole
jconsole可以监控Java应用程序(如jar应用、Tomcat等),但被监视的应用程序必须和jconsole是用同一个用户运行的 。jvisualvm的使用和jconsole类似 。

  • 本地监控: jconsole pid
  • 远程监控: jconsole [ hostname:portNum ]
使用远程监控需要配置jmx代理信息,修改Tomcat的bin目录下的catalina.bat 。
set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=HostIPset JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8888set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=falseset JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false连接成功后可以在overview中查看内存、线程、类及CPU使用情况:
JVM 性能调优监控工具

文章插图
 
2. probe
Lambda Probe 是基于 Web + AJAX 的强大的免费开源工具,可以用来实时管理一个单独的host 。LambdaProbe拥有几乎所有Tomcat Manager的功能,还包括应用程序、数据源、发布、日志、线程、集群、系统信息、状态、连接器状态这些功能,并能显示 Server 的详细内存占用状态 。
probe war包下载
3. jmap
打印java进程的堆内存信息 。
  • jmap -heap pid查看heap的概要信息,GC使用的算法、heap的配置及wise heap的使用情况.
  • jmap -histo[:live] pid 查看堆内存中的每个类的类名、实例数量、内存占用大小
  • jmap -dump:live, format=b, file=fileName pid 将内存使用情况导出到文件中,再用jhat、MAT、VisualVM分析查看,以便查找内存溢出原因
4. jhat
jhat可以对JVM中导出的文件进行分析,使用命令 jhat fileName 即可以在浏览器中输入http://localhost:7000查看内存信息 。如果Dump文件太大需要加上-J-Xmx512m指定最大堆内存,如 jhat -J-Xmx512m [-port 9998] tmp.bin
分析内存还可以使用Eclipse的Memory Analyzer,插件地址
http://download.eclipse.org/releases/juno,找到General Purpose Tools底下的Memory Analyzer并安装 。
5. jstat
查看classloader,compiler,gc相关信息,实时监控资源和性能。jstat工具特别强大,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量 。
语法结构:
jstat -<option> [-t] [-h<lines>] <pid> [<interval> [<count>]]
Options — 通常使用 -gcutil 查看gc情况
interval – 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
结果说明:
【JVM 性能调优监控工具】S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT— 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT— 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)