XPocket 用戶文檔
XPocket
是PerfMa為終結(jié)性能問題而生的開源的插件容器抖棘,它是性能領(lǐng)域的樂高歇由,將定位或者解決各種性能問題的常見的Linux命令场航,JDK工具萍肆,知名性能工具等適配成各種XPocket插件袍榆,并讓它們可以相互聯(lián)動一鍵解決特定的性能問題。 目前XPocket插件生態(tài)已經(jīng)實現(xiàn)了HSDB塘揣、JDB包雀、JConsole、Perf亲铡、Arthas等多個優(yōu)秀的開源性能工具的插件化集成才写,現(xiàn)階段主要側(cè)重性能領(lǐng)域葡兑。
當(dāng)你遇到以下類似問題時,XPocket
可以幫助到你:
- 系統(tǒng)存在性能問題赞草?
- 問題排查時一頭霧水讹堤,無從下手?
- 使用一個新的工具厨疙,下載洲守、文檔、安裝完就下班了沾凄?
- 好不容易用起來梗醇,只因輸出不合理就又要去找新工具?
- 有些自己實現(xiàn)的小工具散落各處撒蟀?
- 排查過的問題記不記住全憑腦子叙谨?
XPocket
支持JDK 8+,支持Linux/Mac/Windows牙肝,采用命令行交互模式唉俗,提供豐富的 Tab
自動補全功能嗤朴,支持管道操作配椭。
插件開源生態(tài)
- XPocket plugin HSDB
- XPocket plugin JDB
- XPocket plugin JConsole
- XPocket plugin Perf
- XPocket plugin Arthas
- XPocket plugin VJMap
- XPocket plugin VJTop
XPocket在線教程
XPocket官方網(wǎng)站
XPocket插件中心
快速開始
1.下載模擬程序,解壓并運行
wget https://a.perfma.net/xpocket/download/XPocket-demo.tar.gz
tar -xvf XPocket-demo.tar.gz
cd simulator
sh run.sh
2.下載xpocket雹姊,然后解壓并運行
wget https://a.perfma.net/xpocket/download/XPocket.tar.gz
tar -xvf XPocket.tar.gz
sh xpocket/xpocket.sh
啟動成功后如下所示
[圖片上傳失敗...(image-31e6f5-1680154107036)]
3.使用插件
1.查看插件列表
plugins
列表如下圖所示
[圖片上傳失敗...(image-8e8ea5-1680154107036)]
2.使用命令 use + pluginName 或者 use + pluginName@NameSpace 來使用插件股缸,例
use jdb@JDK
4.切換插件
- 查看插件列表
- 使用 use + pluginName 或者 use + pluginName@NameSpace 來使用插件
5.獲取幫助
利用help命令來獲取更多幫助信息
- 獲取插件相關(guān)的幫助信息 : help + pluginName@NameSpace ,例如吱雏。
help jdb@JDK
- 獲取命令相關(guān)的幫助信息 : help + pluginName.commandName (如果已經(jīng)切換到插件的操作空間下敦姻,可以直接使用 help + commandName 的方式),例如。
help jdb.cont
- 切換到某個插件的操作空間下后歧杏,可以通過help命令查看當(dāng)前插件的命令列表镰惦。
6.管道操作
場景:當(dāng)前插件位于JConsole下,需要attach上我們的demo程序犬绒。
常規(guī)操作(jps -> 獲取demo程序的pid -> 使用attach命令attach目標(biāo)進程)旺入。
XPocket的管道操作只需一條命令即可(jps | grep demo | split -i 0 | attach),如下所示凯力。
[圖片上傳失敗...(image-59ee3c-1680154107036)]
7.退出插件
XPocket退出插件的方式很簡單茵瘾,只需要使用命令 cd
即可,cd命令可以退出當(dāng)前插件咐鹤,使得當(dāng)前的操作空間回到系統(tǒng)層拗秘,如下圖所示。
[圖片上傳失敗...(image-a947bb-1680154107036)]
8.退出XPocket
退出XPocket使用命令 quit
即可祈惶,如下圖所示
[圖片上傳失敗...(image-45b2b3-1680154107036)]
運行模式
1. telnet server模式
sh xpocket.sh -run_mode telnet -port 9527
- 該模式會啟動一個靜默模式的XPocket雕旨,以對應(yīng)端口的Telnet Server接受外部鏈接并使用扮匠,適用于遠(yuǎn)程執(zhí)行操作的場景。
2. run once 模式
sh xpocket.sh -run_mode once "echo test"
- 該模式是啟動XPocket運行完指定命令以后直接退出凡涩,適用于外部調(diào)用完成單次操作的場景餐禁。
3. Java Agent模式
sh xpocket.sh -run_mode agent-launcher -pid 1 -port 9527
- 該模式與telnet模式類似,但是是將XPocket整體作為一個Java Agent掛載到目標(biāo)進程上運行突照,適用于容器類場景帮非,并且可以獲取更多JVM運行時信息。
插件開發(fā)
詳情請見開發(fā)者指南
現(xiàn)有插件
HSDB
簡介
探索JVM的運行時數(shù)據(jù)讹蘑,強大的JVM運行時狀態(tài)分析工具(注:由于jdk8以上開始實施模塊化末盔,導(dǎo)致HSDB與其的運行機制不兼容)。
操作指南
Command-Name Command-Description
hsdb hsdb [path of sa-jdi.jar] start hsdb command line
Tips:
only support Windows platform
更多操作以及介紹請參考官方介紹
JDB
簡介
Java調(diào)試器(JDB)是Java類在命令行中調(diào)試程序的工具座慰, 它實現(xiàn)了Java平臺調(diào)試器體系結(jié)構(gòu)陨舱, 它有助于使用Java調(diào)試接口(JDI)檢測和修復(fù)Java程序中的錯誤。
操作指南
Command-Name Command-Description
jdb jdb <options> <class> <arguments>
Tips:
1.使用jdb -help獲取詳細(xì)幫助信息版仔。
2.使用jdb -listconnectors 獲取當(dāng)前支持的所有連接器游盲。
3.可以使用例如 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8000 鏈接已經(jīng)開啟debug模式的java進程。
4.使用jdb -classspath .:$CLASS_PATH 來啟動jdb會話(windows上需要使用;分隔多個路徑)蛮粮,然后通過stop in/at 設(shè)置斷點并使用run啟動一個可以被debug的java進程益缎。
5.啟動jdb會話以后也可以通過help命令獲取詳細(xì)幫助。
更多操作以及介紹請參考官方介紹
Perf
簡介
Perf功能強大然想,它可以檢測CPU性能計數(shù)器莺奔,跟蹤點,kprobes和uprobes(動態(tài)跟蹤)变泄,它能夠進行輕量級分析令哟。它也包含在Linux內(nèi)核的tools / perf下,并且經(jīng)常更新和增強妨蛹,
Perf最初是在Linux中使用性能計數(shù)器子系統(tǒng)的工具屏富,并且進行了各種增強以添加跟蹤功能,更詳細(xì)的內(nèi)容請參考Perf介紹蛙卤。
操作指南
Command-Name Command-Description
config Get and set variables in a configuration file.
context-switches process context-switches detail
page-faults process page-faults detail
lock Analyze lock events
ftrace simple wrapper for kernel's ftrace functionality
report Read perf.data (created by perf record) and display the profile
analyze analyze process cpu usage
record Run a command and record its profile into perf.data
sched Tool to trace/measure scheduler properties (latencies)
probe Define new dynamic tracepoints
script Read perf.data (created by perf record) and display trace output
version display the version of perf binary
list List all symbolic event types
annotate Read perf.data (created by perf record) and display annotated code
create-java-perf-map generate /tmp/perf-<pid>.map files for just-in-time(JIT)-compiled methods for use with perf
stat Run a command and gather performance counter statistics
proc-stat process performance stats
Perf插件集成了PerfMa自己增加的幾條命令如:analyze命令:
analyze -p [pid] (-p 指定進程采集熱點)
analyze -detail 查看進程CPU熱點抓取結(jié)果
同時支持perf原生的命令和參數(shù)狠半,并且針對java程序集成了perf-map-agent 這個工具,可以協(xié)助顯示java的調(diào)用棧信息.具體使用方式見命令的幫助信息(如 help analyze)
Arthas
簡介
Arthas 是Alibaba開源的Java診斷工具表窘,深受開發(fā)者喜愛典予,支持JDK 6+,支持Linux/Mac/Windows乐严,采用命令行交互模式瘤袖,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷昂验。
操作指南
Command-Name Command-Description
attach attach [pid],attach a java process and start the Arthas server in localhost 3658,then connect it
Tips:
Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.
XPocket管控了Arthas在attach進程之前的輸入輸出捂敌,attach之后的具體使用請參考Arthas官方文檔
JConsole
簡介
JConsole 是一個內(nèi)置Java性能分析器艾扮,用于對JVM中內(nèi)存,線程和類等的監(jiān)控占婉,這款工具的好處在于泡嘴,占用系統(tǒng)資源少,而且結(jié)合Jstat逆济,可以有效監(jiān)控到j(luò)ava內(nèi)存的變動情況酌予,以及引起變動的原因。在項目追蹤內(nèi)存泄露問題時奖慌,很實用抛虫。
操作指南
Command-Name Command-Description
attach attach <local jvm pid>
Tips:
1.使用help獲取幫助信息。
2.更詳細(xì)的功能简僧,請attach一個進程后使用
注:插件化后的JConsole相比gui版本的JConsole在顯示與操作上有所區(qū)別建椰,但是數(shù)據(jù)的采集方式是一樣的。
VJMap
簡介
分代版的jmap(新生代岛马,存活區(qū)棉姐,老生代),是排查內(nèi)存緩慢泄露啦逆,老生代增長過快原因的利器伞矩。因為jmap -histo PID 打印的是整個Heap的對象統(tǒng)計信息,而為了定位上面的問題蹦浦,我們需要專門查看OldGen對象扭吁,和Survivor區(qū)大齡對象的工具。
vjmap的原始思路來源于R大的TBJMap 盲镶,翻新后支持JDK8,支持Survivor區(qū)大齡對象過濾蝌诡。
注意:因為VJMap的原理溉贿,只支持CMS和ParallelGC,不支持G1浦旱。
操作指南
Command-Name Command-Description
vjmap vjmap 1.0.9 - prints per GC generation (Eden, Survivor, OldGen) object details of a given process.
Tips:
Usage: vjmap <options> <PID>
Usage: vjmap <options> <executable java path> <coredump file path>
Usage "help vjmap" show options info
Example:
打印整個堆中對象的統(tǒng)計信息宇色,按對象的total size排序:
vjmap -all PID > /tmp/histo.log
推薦,打印老年代的對象統(tǒng)計信息颁湖,按對象的oldgen size排序宣蠕,比-all快很多,暫時只支持CMS:
vjmap -old PID > /tmp/histo-old.log
推薦甥捺,打印Survivor區(qū)的對象統(tǒng)計信息抢蚀,默認(rèn)age>=3
vjmap -sur PID > /tmp/histo-sur.log
推薦,打印Survivor區(qū)的對象統(tǒng)計信息镰禾,查看age>=4的對象
vjmap -sur:minage=4 PID > /tmp/histo-sur.log
推薦皿曲,打印Survivor區(qū)的對象統(tǒng)計信息唱逢,單獨查看age=4的對象:
vjmap -sur:age=4 PID > /tmp/histo-sur.log
Doraemon
簡介
Doraemon是PerfMa開發(fā)的一款鏈接性能分析產(chǎn)品的體驗工具,操作簡單屋休,功能強大坞古,提供jvm參數(shù)分析,線程離線分析以及內(nèi)存離線分析的功能
操作指南
Command-Name Command-Description
attach attach <local jvm pid>
detach detach
analyse use 'analyse <AbsolutePath>' to analyse memory dump file
help command help info
Tips:
1.更豐富的操作劫樟,請先attach一個進程
插件中心
更豐富的內(nèi)容痪枫,建議您前往插件中心
Tips
- sa-jdi.jar 主要用于支持插件VJMap的正常使用(注:由于jdk8以上開始實施模塊化,導(dǎo)致VJMap的運行機制不兼容)叠艳。
- 框架擴展開發(fā)的包依賴: com.perfma.xlab:xpocket-framework-spi:2.0.0-RELEASE