1. 程式人生 > >使用jvisualvm監控JAVA程式,注意對程式效能的影響

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

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

   先說它的功勞:

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

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

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

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

下面說一下它的問題:

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

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


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


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