JVM监测工具主要有下几种功能:
1.jvm内部情况分析与了解。
对jvm参数、CPU、内存、堆等信息的查看和了解。
2.性能调优。
调整软硬件融合度。
3.应用运行时问题解决。
如:
OutOfMemoryError,内存不足
内存泄露
线程死锁
锁争用(Lock Contention)
Java进程消耗CPU过高
一、可视化监测工具
1.jvisualvm,是jdk自带的jvm性能监测工具。
工具路径:jdk1.7.0_03\bin
运行模式:双击运行
基础功能:
1、可以通过本地/远程管理、监控jvm虚拟机
2、可以参考jvm虚拟机参数与系统参数
3、可以监测CPU、堆、permGen、类、线程等运行信息,并可以对其操作。如:垃圾回收操作,线程信息查看,堆信息查看。
特殊功能:
1、可以进行程序应用快照。
2 、可以安装其他监测辅助插件。
3、性能分析,数据抽样。
jvisualvm界面如下:
2.jconsole,是jdk自带的jvm性能监测工具。
工具路径:jdk1.7.0_03\bin
运行模式:双击运行
基础功能:
1、可以通过本地/远程管理、监控jvm虚拟机
2、可以参考jvm虚拟机参数与系统参数
3、可以监测CPU、堆、permGen、类、线程等运行信息,并可以对其操作。如:垃圾回收操作,线程信息查看,堆信息查看。
特殊功能:
1、可以查看堆和非堆内存占用情况,查看各代区内存信息。
2、可以查看MBean信息。
jconsole的界面如下:
3.
YourKit Java Profiler:
是业界领先的Java剖析工具。
工具路径: http://www.warezaccess.com/search/yourkit.html 下载相应的版本安装即可。
安装方法可以参考以下两篇文章:
本机windows远程连接到linux服务器上监控java虚拟机的性能 : http://zhwj184.iteye.com/blog/764575
本机tomcat安装yourkit插件 : http://developer.51cto.com/art/201203/326454.htm
安装yourkit到IDE
运行模式:双击运行
基础功能:
1、可以通过本地/远程管理、监控jvm虚拟机
2、可以
看各函数cpu资源消耗比例
3、可以监测CPU、内存、类、线程等运行信息。
特殊功能:
1、GC查看。
2.
请求的执行路径查看。
yourkit软件界面如下:
4.
JProbe:
一个企业级的
Java
剖析器。
工具路径: http://www.innovatedigital.com/download/JProbe_index.asp 下载相应的版本安装,然后破解。
运行模式:双击运行
有
Eclipse
插件
基础功能:
1、
内存分析、性能分析、
2、可以监测CPU、堆、内存、类、线程等运行信息。
特殊功能:
1、
覆盖分析
2、
自动性能分析和度量报告
jprobe软件界面如下:
4.
jProfiler:JProfiler是一个商业授权的Java剖析工具。
工具路径: http://www.ej-technologies.com/products/jprofiler/overview.html下载相应的版本安装,然后破解。
运行模式:双击运行
有
Eclipse
插件
具体安装与使用详情请参照: http://www.cnblogs.com/jayzee/p/3184087.html
http://blog.csdn.net/djy1135/article/details/2304465
基础功能:
1、cpu分析、
内存分析、性能分析、
2、可以监测CPU、堆、内存、类、线程等运行信息。
特殊功能:
1、
专用于分析J2SE和J2EE应用程序。
jprofiler的软件界面如下:
5.
jvmstat
:
jvmstat是图形版的jstat,由Java 官方提供,目前最新版本为3.0。
工具路径: http://www.oracle.com/technetwork/java/jvmstat-142257.html下载相应的版本安装即可。
运行模式:
具体安装与使用详情请参照: http://looyo.iteye.com/blog/1871207
基础功能:
1、cpu分析、
内存分析、性能分析、
2、可以监测CPU、堆、内存、类、线程等运行信息。
特殊功能:
1、
GC监控。
jvmstat的界面如下:
Spring Insight
二、基于命令行监测工具
1.jmap
观察运行中的jvm物理内存的占用情况。
工具路径:jdk1.7.0_03\bin
运行模式:
命令行
命令格式:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
常用命令:jmap -histo 1234(查看
class的实例数目,内存占用,类全名信息)
jmap -heap 1234 (查看对内存情况)
jmap -dump 1234 (
将内存使用的详细情况输出到文件)
注:1234为需要被打印配相信息的java进程id,使用该分析工具时,
jvm会处于假死状态。
基础功能:
1、
内存分析、类情况查看。
2.
jps
列出所有的jvm实例
工具路径:jdk1.7.0_03\bin
运行模式:
命令行
命令格式:
jps [options] [hostid]
注:
如果不指定hostid就默认为当前主机或服务器。
常用命令:jps
-q(查看
pid)
jps -m (
查看传递给main 方法的参数)
jps -l (
查看main类或Jar的全限名)
jps -v (查看
传入JVM的参数)
基础功能:
1、
主要用来输出JVM中运行的进程状态信息
3.
jvmtop:
一个轻量级的控制台程序用来监控机器上运行的所有 Java 虚拟机。
运行平台:linux
下载地址:
http://code.google.com/p/jvmtop/
安装命令:
wget
http://jvmtop.googlecode.com/files/jvmtop-0.5.0.tar.gz
tar -zxvf jvmtop-0.5.0.tar.gz
运行命令:
./jvmtop.sh
常用命令:
./jvmtop.sh 3456(查看3456进程)
4.jstack
观察jvm中当前所有线程的运行情况和线程当前状态
工具路径:jdk1.7.0_03\bin
运行模式:
命令行
命令格式: jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip
常用命令:jps
-q(查看
pid)
jstack -m pid(
查看
java
和
native c/c++
框架的所有栈信息)
jstack -l pid(
查看
关于锁的附加信息)
jstack
-F pid(
当
’jstack [-l] pid’
没有相应的时候强制打印栈信息)
基础功能:
1、
主要用来查看某个Java进程内的线程堆栈信息
5.jstat:
JVM统计监测工具
工具路径:jdk1.7.0_03\bin
运行模式:
命令行
命令格式:
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
常用命令:
jstat -gc
21711
250
4
注:vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时
间间隔。count是采样数目。比如下面输出的是GC信息,采样时间间隔为
250ms,采样数为4
基础功能:
1、
观察classloader,compiler,gc相关信息
6.
hprof:
能够展现CPU使用率,统计堆内存使用情况
三、基于java API的方式监控
各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于 JVM Management API
开发的。
API:
java.lang.management
常用api说明:
1.HotSpotDiagnostic:非标准的监控JMX
2.ClassLoading:加载的类的总体信息
3.
.Compilation:提供JVM的JIT(Just In Time)编译器(将bytecode编译成native code)的信息
4.GarbageCollector:垃圾回收器信息
5.
MemoryPool:通过该MBean可以了解JVM各内存块的信息
6.
OperatingSystem:通过该MBean我们可以了解到JVM所运行在的操作系统上的一些相关信息
7.
Runtime:通过该MBean获取获取到JVM一些相关的信息,通过java.lang.management.RuntimeMXBean可以了解其主要提供的功能。
具体情况请查看: http://www.jmatrix.org/jvm/158.html
http://blog.csdn.net/sixianfeng/article/details/5552228
两篇博文,讲得很详细。
参考文章:
http://developer.51cto.com/art/201203/326355.htm
http://blog.csdn.net/djy1135/article/details/2304465
http://josh-persistence.iteye.com/blog/2161848
http://hillside.iteye.com/blog/706129
http://hbluojiahui.blog.163.com/blog/static/31064767201282091643613/
http://blog.csdn.net/feihong247/article/details/7874063
http://blog.chinaunix.net/uid-405749-id-3741305.html