JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat(一)
默认JDK安装好之后,程序自身带了几个用于查看java程序运行状态和程序相关状态及调试跟踪用的工具,如下:
jstack — 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
jconsole – jconsole是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。
jinfo – jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
jmap – jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。
jdb – jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。
jstat – jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。
jps – jps是用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。
**jstatd-**启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。
jps :列出所有的jvm实例
1jps 列出本机所有的jvm实例
2jps 192.168.0.77
列出远程服务器192.168.0.77机器所有的jvm实例,采用rmi协议,默认连接端口为1099
(前提是远程服务器提供jstatd服务)
输出内容如下:
1jones@jones:~/data/ebook/java/j2se/jdk_gc$ jps
26286 Jps
36174 Jstat
jconsole :一个图形化界面,可以观察到java进程的gc,class,内存等信息。虽然比较直观,但是个人还是比较倾向于使用jstat命令(在最后一部分会对jstat作详细的介绍)。
jinfo(linux下特有)
观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数
1实例:jinfo 2083
2其中2083就是java进程id号,可以用jps得到这个id号。
输出内容太多了,不在这里一一列举,大家可以自己尝试这个命令。
jstack(linux下特有)
可以观察到jvm中当前所有线程的运行情况和线程当前状态
1jstack 2083
jmap(linux下特有,也是很常用的一个命令)
观察运行中的jvm物理内存的占用情况。
参数如下:
– -heap:打印jvm heap的情况
– -histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
– -histo:live :同上,但是只答应存活对象的情况
– -permstat:打印permanent generation heap情况
命令使用:
1jmap -heap 2083
可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况
1jmap -histo 2083 | jmap -histo:live 2083
可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。
写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。
jstat :这是jdk命令中比较重要,也是相当实用的一个命令,可以观察到classloader,compiler,gc相关信息。具体参数如下:
- -class:统计class loader行为信息
- -compile:统计编译行为信息
- -gc:统计jdk gc时heap信息
- -gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况
- -gccause:统计gc的情况,(同-gcutil)和引起gc的事件
- -gcnew:统计gc时,新生代的情况
- -gcnewcapacity:统计gc时,新生代heap容量
- -gcold:统计gc时,老年区的情况
- -gcoldcapacity:统计gc时,老年区heap容量
- -gcpermcapacity:统计gc时,permanent区heap容量
- -gcutil:统计gc时,heap情况
- -printcompilation:不知道干什么的,一直没用过。
一般比较常用的几个参数是:
1jstat -class 2083 1000 10 (每隔1秒监控一次,一共做10次)
输出内容含义如下:
结果 | 描述 |
---|---|
Loaded | Number of classes loaded. |
Bytes | Number of Kbytes loaded. |
Unloaded | Number of classes unloaded. |
Bytes | Number of Kbytes unloaded. |
Time | Time spent performing class load and unload operations. |
1jstat -gc 2083 2000 20(每隔2秒监控一次,共做10)
输出内容含义如下:
结果 | 描述 |
---|---|
S0C | Current survivor space 0 capacity (KB). |
EC | Current eden space capacity (KB). |
EU | Eden space utilization (KB). |
OC | Current old space capacity (KB). |
OU | Old space utilization (KB). |
PC | Current permanent space capacity (KB). |
PU | Permanent space utilization (KB). |
YGC | Number of young generation GC Events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/javamonitor/1420.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.