[转]JVM监控工具
监控,就是要监视控制,既要监视出问题,也要能随时控制调整。下面来说说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