JVM監(jiān)控工具用法指導
這里向大家描述一下JVM監(jiān)控工具的用法,比如jstatd,啟動jvm監(jiān)控服務。它是一個基于rmi的應用,向遠程機器提供本機jvm應用程序的信息。默認端口1099。
JVM監(jiān)控工具介紹
jstatd
此JVM監(jiān)控工具用來啟動jvm監(jiān)控服務。它是一個基于rmi的應用,向遠程機器提供本機jvm應用程序的信息。默認端口1099。
實例:jstatd-J-Djava.security.policy=my.policy
my.policy文件需要自己建立,內(nèi)如如下:
- grantcodebase"file:$JAVA_HOME/lib/tools.jar"{
- permissionjava.security.AllPermission;
- };
這是安全策略文件,因為jdk對jvm做了jaas的安全檢測,所以我們必須設置一些策略,使得jstatd被允許作網(wǎng)絡操作
JVM監(jiān)控工具之jps
列出所有的jvm實例
實例:jps
列出本機所有的jvm實例
jps192.168.0.77
列出遠程服務器192.168.0.77機器所有的jvm實例,采用rmi協(xié)議,默認連接端口為1099
(前提是遠程服務器提供jstatd服務)
輸出內(nèi)容如下:
- jones@jones:~/data/ebook/java/j2se/jdk_gc$jps
- 6286Jps
- 6174Jstat
JVM監(jiān)控工具之jconsole
一個圖形化界面,可以觀察到java進程的gc,class,內(nèi)存等信息。雖然比較直觀,但是個人還是比較傾向于使用jstat命令(在最后一部分會對jstat作詳細的介紹)。
JVM監(jiān)控工具之jinfo(linux下特有)
觀察運行中的java程序的運行環(huán)境參數(shù):參數(shù)包括JavaSystem屬性和JVM命令行參數(shù)
實例:jinfo2083
其中2083就是java進程id號,可以用jps得到這個id號。
輸出內(nèi)容太多了,不在這里一一列舉,大家可以自己嘗試這個命令。
JVM監(jiān)控工具之jstack(linux下特有)
可以觀察到jvm中當前所有線程的運行情況和線程當前狀態(tài)
jstack2083
JVM監(jiān)控工具之jmap(linux下特有,也是很常用的一個命令)
觀察運行中的jvm物理內(nèi)存的占用情況。
參數(shù)如下:
-heap:打印jvmheap的情況
-histo:打印jvmheap的直方圖。其輸出信息包括類名,對象數(shù)量,對象占用大小。
-histo:live:同上,但是只答應存活對象的情況
-permstat:打印permanentgenerationheap情況
命令使用:
jmap-heap2083
可以觀察到NewGeneration(EdenSpace,F(xiàn)romSpace,ToSpace),tenuredgeneration,PermGeneration的內(nèi)存使用情況
輸出內(nèi)容:
jmap-histo2083|jmap-histo:live2083
可以觀察heap中所有對象的情況(heap中所有生存的對象的情況)。包括對象數(shù)量和所占空間大小。
輸出內(nèi)容:
寫個腳本,可以很快把占用heap最大的對象找出來,對付內(nèi)存泄漏特別有效。
JVM監(jiān)控工具之jstat
最后要重點介紹下這個命令。這是jdk命令中比較重要,也是相當實用的一個命令,可以觀察到classloader,compiler,gc相關信息,具體參數(shù)如下:
-class:統(tǒng)計classloader行為信息
-compile:統(tǒng)計編譯行為信息
-gc:統(tǒng)計jdkgc時heap信息
-gccapacity:統(tǒng)計不同的generations(不知道怎么翻譯好,包括新生區(qū),老年區(qū),permanent區(qū))相應的heap容量情況
-gccause:統(tǒng)計gc的情況,(同-gcutil)和引起gc的事件
-gcnew:統(tǒng)計gc時,新生代的情況
-gcnewcapacity:統(tǒng)計gc時,新生代heap容量
-gcold:統(tǒng)計gc時,老年區(qū)的情況
-gcoldcapacity:統(tǒng)計gc時,老年區(qū)heap容量
-gcpermcapacity:統(tǒng)計gc時,permanent區(qū)heap容量
-gcutil:統(tǒng)計gc時,heap情況
-printcompilation:不知道干什么的,一直沒用過。
【編輯推薦】
- 常見JVM監(jiān)控工具用法介紹
- JVM內(nèi)存限制問題解決方案
- 揭露MyEclipse JVM內(nèi)存不足的內(nèi)幕
- 專家指導 如何進行JVM參數(shù)配置
- 巧解IBM JVM for Linux onPOWER性能調(diào)優(yōu)