jmap -heap 1234 查看進程號為1234的Java程序的整個jvm內(nèi)存狀態(tài)
jmap -histo 1234 查找進程號為1234的java程序的jvm堆中對象詳細占用情況
jmap -dump:format=b,file=/my.dump 1234 ?導出1234進程的java程序的整個JVM信息
jhat -J-Xmx1024M /my.dump, 啟動web服務查看jmap導出的java程序的jvm信息坟乾。
jstack 1234 查看1234進程的所有堆棧信息讳侨。
以上命令的功能都可以從jVisualVM程序獲取陌粹,雙擊運行即可。
jmap是java自帶的工具
查看整個JVM內(nèi)存狀態(tài)
jmap -heap [pid]
要注意的是在使用CMS GC 情況下某宪,jmap -heap的執(zhí)行有可能會導致JAVA 進程掛起
查看JVM堆中對象詳細占用情況
jmap -histo [pid]
導出整個JVM 中內(nèi)存信息
jmap -dump:format=b,file=文件名 [pid]
jhat是sun 1.6及以上版本中自帶的一個用于分析JVM 堆DUMP 文件的工具仿村,基于此工具可分析JVM HEAP 中對象的內(nèi)存占用情況
jhat -J-Xmx1024M [file] ? (此處的file指的是jmap -dump導出的內(nèi)存數(shù)據(jù)文件)
執(zhí)行后等待console 中輸入start HTTP server on port 7000 即可使用瀏覽器訪問 IP:7000
eclipse Memory Analyzer
Eclipse 提供的一個用于分析JVM 堆Dump文件的插件。借助這個插件可查看對象的內(nèi)存占用狀況兴喂,引用關(guān)系蔼囊,分析內(nèi)存泄露等。
kill -3 [pid]
在Linux 上找到Java所在的進程號衣迷,然后執(zhí)行以上命令畏鼓,線程的相關(guān)信息就輸出到console
jstack
jstack 是sun JDK 自帶的工具,通過該工具可以看到JVM 中線程的運行狀況壶谒,包括鎖等待云矫,線程是否在運行
執(zhí)行 jstack [pid] ,線程的所有堆棧信息
"http-8080-10" daemon prio=10 tid=x0a949bb60 nid=0x884? waiting for monitor entry [...]
"http-8080-10" 這個線程處于等待狀態(tài)。 waiting for monitor entry 如果在連續(xù)幾次輸出線程堆棧信息都存在于同一個或多個線程上時汗菜,則說明系統(tǒng)中有鎖競爭激烈让禀,死鎖,或鎖餓死的想象陨界。
“http-8080-11” daemon prio=10 tix=xxx nid=xxx in object.wait() [...]
java.lang.Thread.State:waiting (on object monitor)
該表示http-8080-11的線程處于對象的Wait 上巡揍,等待其他線程的喚醒,這也是線程池的常見用法普碎。
“Low Memory Detector”daemon prio=10 tix=xx nid=xxx runnable [...] java.lang.Thread.State:runnable
表示“Low Memory Detector” 的線程處于Runable狀態(tài)吼肥,等待獲嚷计健CPU的使用權(quán).
參考:http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/
jvisualvm
一.Java VisualVM 概述
對于使用命令行遠程監(jiān)控jvm?太麻煩?麻车。?在jdk1.6?中?Oracle?提供了一個新的可視化的缀皱。?JVM?監(jiān)控工具?Java?VisualVM?。jvisualvm.exe?在JDK?的?bin?目錄下动猬。
雙擊啟動?Java?VisualVM?后可以看到窗口左側(cè)?“應用程序?”欄中有“?本地?”啤斗、“遠程?”?、“快照?”三個項目赁咙。
“本地?”下顯示的是在?localhost?運行的?Java?程序的資源占用情況钮莲,如果本地有?Java?程序在運行的話啟動?Java?VisualVM?即可看到相應的程序名,點擊程序名打開相應的資源監(jiān)控菜單彼水,以圖形的形式列出程序所占用的?CPU?崔拥、?Heap?、?PermGen?凤覆、類链瓦、線程的?統(tǒng)計信息。
“遠程”?項下列出的遠程主機上的?Java?程序的資源占用情況盯桦,但需要在遠程主機上運行?jstatd?守護程序
VisualVM分為?3?類慈俯,?本地?它會自動偵測到,并顯示出來
雙擊Local?下的任一節(jié)點拥峦,看到右邊的變化?贴膘,你可以監(jiān)控?CPU?,內(nèi)存略号,類刑峡,線程等運行狀況,實時監(jiān)控服務器性能玄柠。
右鍵?VisualVM我們可以看到?Thread?Dump,?Heap?Dump
做?Thread?Dump?很快氛琢,馬上就可以看到結(jié)果
Heap?Dump要稍花費一些時間(可以看到當前?heap?里對象的數(shù)量及占用的比例,做?OOM?很好用)
對其功能不再做描述随闪,可以查閱網(wǎng)上相關(guān)質(zhì)量阳似,我們主要講的是如何使用?VisualVM?遠程監(jiān)控。