欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[转]JVM监控工具

程序员文章站 2022-06-17 16:55:27
...

监控,就是要监视控制,既要监视出问题,也要能随时控制调整。下面来说说JVM监控的常用工具(JDK/bin自带提供了很多)和方法。

1 . jinfo

jinfo -h 可以知道使用的参数有:

 

jinfo [option] <pid> to connect to running process
jinfo [option] <executable core> to connect a core file
jinfo [option] [service_id@]<remote server IP or hostname> to connect  to remote debug server

 

 

可以看出主要支持的方式是本地pid、core file(如果java程序崩溃生成core文件,jstack工具可以用来获得core文件)和远程server的方式,下面很多都类似,不再说明。

运行一个试试:

jinfo -flags 4520 > info.txt

Attaching to process ID 4520, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.60-b23
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=67108864 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=178782208 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=22020096 -XX:OldSize=45088768 -XX:ThreadStackSize=192 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
Command line:  -Djava.endorsed.dirs=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\\tomcat-7.0.20.B.RELEASE\common\endorsed -Dcatalina.base=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\dss-server -Dcatalina.home=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\\tomcat-7.0.20.B.RELEASE -Djava.io.tmpdir=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\dss-server\temp -Djava.util.logging.manager=com.springsource.tcserver.serviceability.logging.TcServerLogManager -Djava.util.logging.config.file=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\dss-server\conf\logging.properties -Dwrapper.dump.port=-1 -Xmx512M -Xss192K -Djava.library.path=D:\Tools\springsource\vfabric-tc-server-developer-2.6.1.RELEASE\dss-server\bin\winx86_64 -Dwrapper.key=Ba7mt23RCGfW789b -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=2240 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=5 -Dwrapper.jvmid=2

当然也可以改变运行时的java 进程的opts,就是控制。

 

2. jmap 

观察运行中的jvm物理内存的占用情况。 如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

jmap -h 可以看到主要的参数,这里举几个例子:

jmap -heap pid
jmap -dump:format=b,file=heap.bin <pid>
dump文件可以通过MemoryAnalyzer等其他分析工具查看,可以查看dump时对象数量,内存占用,线程情况等。
jmap -dump:live

 

3. jstack

观察jvm中当前所有线程的运行情况和线程当前状态

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

jstack pid

 

4. jstat


       JVM监测工具(Java Virtual Machine Statistics Monitoring Tool)。利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括各种堆和非堆的大小及其内存使用量、classloader、compiler、垃圾回收状况等。

Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

 

5. jvisualvm.exe

很明显这是一个可视化的工具

 

转自:http://blog.csdn.net/hugolyl/article/details/49781657