說明:本文的小貼士是針對jprofiler8的,其他版本上可能有不適用的地方
貼士一:使用jpenable監控,無需增加jvm參數和重啟
jprofiler8服務端監控的時,有四種方式,主要為需要增加jvm參數和不需要增加jvm參數,離線模式和非離線模式,其中最簡單的使用方式為:直接執行jprofiler8/bin/下面的jpenable,選擇要監控的應用程序的pid,指定端口號
服務器執行如下:
qaperf@classb:~/perftest/jprofiler8/bin$ ./jpenable Connecting to org.apache.catalina.startup.Bootstrap start [14007] ... Please select the profiling mode: GUI mode (attach with JProfiler GUI) [1, Enter] Offline mode (use config file to setprofiling settings) [2]1Please enter a profiling port [31757]8849You can now use the JProfiler GUI to connect on port 8849
四種方式對比
貼士二:設置sampling或instrument采集模式
jprofiler客戶端連接時,可以設置監控方式,其中在Method clall recording中有 定制監控方法分為,instrumentation方式和sampling方式
instrumentation(注入)方式,是指在方法中注入字節碼,記錄監控信息,優點,結果更準確真實,監控的數據更多,包含調用次數等,缺點:性能開銷大
sampling(采樣)方式,是指,通過額外的線程,周期性的采集其他線程的執行信息,jprofiler8中默認的采集間隔為5ms(visualVM中默認的采樣時間為100ms),優點:開銷小;缺點:無法采集調用次數等信息,且對于執行時間短且調用頻率高的接口存在采集遺漏的情況
貼士三:設置CPU Profiling的統計時間類型
Cpu Profiling,統計方法的執行時間有兩種:
一種:Elapsed time:(wall clock time),統計的是從方法進入到離開的時間,這種統計方式簡單,開銷小,但是統計出來的時間可能比真實的CPU時間長
一種:Estimated CPU time:(CPU time)真正的CPU時間,開銷大
貼士四:CPU監控之Call Tree層的監控點
右鍵,通過view settings可以設置顯示的數據內容,該圖片上包含了總時間、inherent time(即該方法的執行時間減去節點的執行時間)、執行次數、對應的類和方法
層級展開,同故宮百分比可以看到消耗CPU的比例,這個接口中,freemarker消耗CPU約為70%以上,為最消耗CPU的方法
方法前面的圖標,綠色的m表示method,如果通過上方的Aggregation level選擇Class or Package,會對應變成紫色的C或者黃色的P;紅色的箭頭表示Servlets,圓球表示browser,即對應url;如果遇到其他的一些看不懂的圖標可以參見jprofiler的help文檔,非常的全面和細致
貼士五:CPU監控之hot spot的使用
點擊host spot 可以查看當前的熱點方法,找到是哪些方法最消耗CPU
其中Filter classes這兒有個設置,默認情況下是 show separately,是每個方法獨立的時間統計,不包含調用關系,推薦使用Add to calling class,這個是包含所調用方法時間的統計,這個更能從業務上看到是因為什么導致的CPU消耗高
點擊+號展開熱點方法,可以看到是哪些更上層的方法調用了它
貼士六:CPU監控之動態修改監控配置
Profiling setting
監控過程中,可以通過點擊session setting 實時調整監控配置
設置好后,點擊Apply now可以立刻應用到當前監控中
使用精華總結
-
推薦使用jpenable的形式鏈接遠程服務
-
推薦不改變jprofiler的默認配置方式
-
CPU監控使用hot spot時,推薦查看下Add to calling class的統計結果,方便理解
-
visualVm也是通過sampling的方式進行CPU Profiling分析的,但是這種方式有個弊端:當存在某些接口執行時間較短且高頻繁調用時,不易發現;而且采樣存在遺漏,統計的結果分析不很清楚,需要使用instrument的方式進行補充驗證。
安大叔說
我們都是烏龜,背負著責任和夢想,也曾怨憤,終有一天,你會發現,它們成了你唯一不離不棄的依靠
文章列表