其實(shí)在 JDK 5 中已經(jīng)新加入了這個(gè)功能了. 現(xiàn)在的 JDK 已經(jīng)內(nèi)置了對(duì) VM 的監(jiān)控功能. JDK 6 中這個(gè)工具變的更加好用了. 關(guān)于 JDK 5 中如何使用這個(gè)工具可以參考這里: http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
jconsole 可以很方便的監(jiān)控本機(jī)的所有 Java 應(yīng)用和遠(yuǎn)程的應(yīng)用.
監(jiān)控本地應(yīng)用
首先就是啟動(dòng)您要監(jiān)控的應(yīng)用, 例如我用 JDK 1.6 來(lái)啟動(dòng)了 Tomcat, 或者 Eclipse 也可以, 可以在任務(wù)管理器(Ctrl+Alt+Del可以調(diào)出來(lái), 或者在任務(wù)欄點(diǎn)擊右鍵)里看到進(jìn)程ID, 例如我這里是 6132.
接著在 JDK 安裝目錄中(<JDK_HOME>/bin/jconsole.exe)啟動(dòng) jconsole.exe (雙擊或者在 cmd 里面敲入 jconsole), 主界面會(huì)提示您建立一個(gè)新連接:
可以看到進(jìn)程ID, 選擇它, 然后點(diǎn)擊"連接". 這些 ID 必須都是用 JDK 1.6 的 java.exe 啟動(dòng)的, 否則在列表里看不到.
JConsle 能監(jiān)控內(nèi)存,線(xiàn)程,類(lèi)的數(shù)目和CPU然后點(diǎn)擊各個(gè) Tab 可以看到詳細(xì)的輸出, 詳細(xì)的輸出包括:
內(nèi)存: 堆/非堆, 峰值, 內(nèi)存的各個(gè)部分, 例如 Perm, Eden 等的大小曲線(xiàn)圖.
線(xiàn)程: 峰值, 所有線(xiàn)程的列表, 堆棧跟蹤(哪個(gè)對(duì)象中的線(xiàn)程)等. 還可以強(qiáng)制執(zhí)行GC.
類(lèi): 峰值, 類(lèi)總數(shù)曲線(xiàn)圖.
MBean: 一些 JVM 參數(shù)的詳細(xì) MBean 信息.
監(jiān)控遠(yuǎn)程進(jìn)程
首先需要在運(yùn)行的應(yīng)用上啟用遠(yuǎn)程管理, 參數(shù)如下(簡(jiǎn)單期間就不加用戶(hù)驗(yàn)證了):
java -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar ../demo/jfc/Java2D/Java2Demo.jar
然后連接的時(shí)候選擇遠(yuǎn)程進(jìn)程, 地址輸入:
localhost:1090
即可.當(dāng)然在別的電腦上(一般是局域網(wǎng))可以輸入那個(gè)電腦的IP.
綜述: 使用 JConsole 可以簡(jiǎn)單的監(jiān)控 Server 狀態(tài), 但是本身要占一定的資源, 不過(guò) JVM 自帶的監(jiān)控, 理論上講應(yīng)該是占資源很小很小的, 可以用它來(lái)方便的了解 Web 服務(wù)器應(yīng)用進(jìn)程的狀態(tài). 如果要調(diào)優(yōu)應(yīng)用, 還是使用 JProfiler 等工具更好一些, 當(dāng)然它們占的資源也更大.
后記:
jdk1.6.0\demo\management\MemoryMonitor
這里帶了個(gè)很好的畫(huà)內(nèi)存曲線(xiàn)圖的例子... 大家改改就可以實(shí)現(xiàn)同時(shí)監(jiān)控多臺(tái) Server 的內(nèi)存曲線(xiàn)了....
作者: BeanSoft@126.com
2006.12.13
聯(lián)系客服