天天看點

使用jvisualvm監控JAVA程式,注意對程式性能的影響

      最近在使用阿裡的Dubbo【http://code.alibabatech.com/wiki/display/dubbo/Home-zh】做一個實時分析功能,為了提高性能,對程式進行了很多的優化工作,在此過程中JDK中的jvisualvm的确功勞不小,但是也有讓我誤解的地方。

   先說它的功勞:

   第一:可以幫我監控線程的數量,及時發現沒有正常結束的線程。由于給dubbo配置了800的線程池,我目前活動的線程中守護線程為826,總數減去800個線程池中的線程,dubbo占用了26個守護線程,再多出來的線程大多就是我程式中生成的線程了。

   第二:可以監控CPU的使用情況。

  第三:監控堆占用記憶體的情況。

  第四:監控總的類的加載數量。

  以上四個監控,均無須修改原有的JAVA源代碼,隻需要隻步簡單的配置即可實作,詳細配置可參見:【http://blog.csdn.net/ssergsw/article/details/9933227】

下面說一下它的問題:

添加了監控後,堆記憶體的占用情況和正常時占用有不小的偏差:

剛開始使用監控後3分鐘的情況:

使用jvisualvm監控JAVA程式,注意對程式性能的影響

下面是使用監控後10分鐘的情況:

使用jvisualvm監控JAVA程式,注意對程式性能的影響

對比兩個圖,可以看出,在沒有使用監控的時候,堆記憶體的占用比較平衡,使用了監控後堆記憶體迅速增加,之後大約5分鐘後GC一次,然後又慢慢上升,是以建議大家在使用監控的時候,多親關注線程和類的加載的情況,另外,不要長期使用工具監控程式!

繼續閱讀