1. 程式人生 > 其它 >XPocket外掛使用案例合集——效能問題排查分析,一個XPocket足以!

XPocket外掛使用案例合集——效能問題排查分析,一個XPocket足以!

你是否遇到過這些問題?

  • 系統存在效能問題
  • 問題排查時一頭霧水,不知道用什麼工具
  • 查詢工具,下載和安裝都很浪費時間
  • 排查問題十分繁瑣,想盡量簡化排查方案以供後續使用

XPocket是PerfMa開源的為終結效能問題而生的外掛容器,它將定位或者解決各種效能問題的常見的Linux命令,JDK工具,知名效能工具等適配成各種XPocket外掛,並讓它們可以相互聯動,一鍵解決特定的效能問題。

目前XPocket外掛生態已經實現了HSDB、JDB、JConsole、Perf、Arthas等多個優秀的開源效能工具的外掛化整合。XPocket支援JDK 8+,支援Linux/Mac/Windows,採用命令列互動模式,提供豐富的 Tab 自動補全功能,支援管道操作。

以下是XPocket官方提供的部分外掛使用指南及真實案例。

1.XPocket外掛jstack_x助力執行緒問題排查

https://heapdump.cn/article/2495088

在程式開發過程中,開發人員通常會遇到許多線上問題,這些問題可能是程式碼Bug導致的,也可能是效能問題引起的。這些線上問題都會通過CPU飆升、GC頻繁、丟擲OOM異常等情況表現出來,這些問題的根因很可能是由於執行緒或執行緒池使用不當造成的。為了儘快定位根因,可以使用jstack_x外掛以執行緒為切入點進行排查。

XPocket外掛jstack_x在JDK自帶的jstack工具上進行了增強,除了支援java棧和本地棧的輸出外,還可以從鎖的角度檢視等待或持有鎖的執行緒,另外還可以通過執行緒名稱和nid過濾出特定的執行緒

本文使用jstack_x外掛分別排查了執行緒的CPU使用率飆升、無意中建立了超量的執行緒以及大量執行緒等待獲取共享資源的問題,XPocket的jstack_x外掛在JDK原有的jstack工具上做了增強,能夠幫助每個開發者更加快速地排查定位出線程相關的問題。

jstack_x外掛下載地址
https://plugin.xpocket.perfma.com/plugin/66
XPocket下載地址
https://xpocket.perfma.com/docs/download/

2.使用XPocket外掛JConsole排查線上OOM異常案例

https://heapdump.cn/article/2630587

XPocket外掛JConsole主要用於記憶體問題的排查,能夠對堆中的Eden、Survivor、Old區以及堆外的Metaspace、Code Cache等區域進行觀察

本文使用JConsole外掛排查了頻繁類載入引起OOM異常以及堆記憶體洩漏引起OOM異常的問題,JConsole能夠排查Java程序記憶體的使用情況,特別是在排查過程中要進行多次列印,比對數值來發現問題。如果要進一步在程式碼級別定位問題,還可以使用XPocket中的其它外掛進行輔助定位。

JConsole外掛下載地址
https://plugin.xpocket.perfma.com/plugin/55

3.使用Perf外掛跟蹤程序切換資訊

https://heapdump.cn/article/2641734

CPU使用率是最直觀和最常用的系統性能指標,是在排查效能問題時會關注的第一個指標。而在導致CPU使用率過高的因素中,程序切換問題也是非常常見的。程序上下文切換次數較多的情況下,很容易導致CPU 將大量時間消耗在暫存器、核心棧、頁表等資源的儲存和恢復上,以至於導致系統性能不能充分利用。

但程序切換次數過多或切換次數異常的時候,針對C/C++程式調式手段非常有限,很難找到程序切換的原因,Perf外掛本身可以跟蹤程序切換呼叫棧並進行統計,本文藉助一個簡單例子驗證了此外掛的功能。

在碰到系統程序程序切換次數異常的問題時可以藉助Perf外掛,排查出具體函式。

Perf外掛下載地址
https://plugin.xpocket.perfma.com/plugin/57

4.使用Top_X外掛排查記憶體過載問題

https://heapdump.cn/article/2642770

Top命令是Linux 系統下常用的監控工具,用於實時獲取程序級別的 CPU 或記憶體使用情況。

XPocket中的Top_X為Linux Top的增強版,可以顯示CPU佔用率/負載,CPU及記憶體程序使用的list。它對於繁雜的top命令輸出進行了功能的拆分和整理,更加清晰易用,支援管道化,尤其可以直接拿到top程序或執行緒tid,pid; mem_s命令增加了按照程序swap大小佔用排序增強了原有top功能

本文模擬一機器記憶體洩漏使用了大量實體記憶體導致實體記憶體飆升的情況。

在碰到記憶體過載問題時可以藉助Top_X外掛排查記憶體佔用情況。

Top_X外掛下載地址
https://plugin.xpocket.perfma.com/plugin/65

5.使用VJMap排查頻繁YGC問題

https://heapdump.cn/article/2634094

分代版的jmap(新生代,存活區,老生代),是排查記憶體緩慢洩露,老生代增長過快原因的利器。因為jmap -histo PID 列印的是整個Heap的物件統計資訊,而為了定位程序頻繁YGC的問題,我們需要專門檢視OldGen物件,和Survivor區大齡物件的工具。

本文首先使用VJMap外掛查看了頻繁YGC程序的年輕代的記憶體使用情況,然後結合HeapDump社群的XElephant工具進行dump檔案分析,最後排查出了問題所在。

VJMap外掛下載地址
https://plugin.xpocket.perfma.com/plugin/58
XPocket下載地址
https://xpocket.perfma.com/docs/download/