官方文檔 | 【JVM調(diào)優(yōu)體系】「GC底層調(diào)優(yōu)實戰(zhàn)」XPocket為終結(jié)性能問題而生—開發(fā)指南

XPocket 用戶文檔

cf0ade9fa6b8b122f49c93eaf4e0e0c9.png

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可以幫助到你:

  1. 系統(tǒng)存在性能問題赞草?
  2. 問題排查時一頭霧水讹堤,無從下手?
  3. 使用一個新的工具厨疙,下載洲守、文檔、安裝完就下班了沾凄?
  4. 好不容易用起來梗醇,只因輸出不合理就又要去找新工具?
  5. 有些自己實現(xiàn)的小工具散落各處撒蟀?
  6. 排查過的問題記不記住全憑腦子叙谨?

XPocket支持JDK 8+,支持Linux/Mac/Windows牙肝,采用命令行交互模式唉俗,提供豐富的 Tab 自動補全功能嗤朴,支持管道操作配椭。

插件開源生態(tài)

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官方文檔

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
 

VJMap
插件倉庫

插件概況

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

鏡像倉庫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末听怕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虑绵,更是在濱河造成了極大的恐慌尿瞭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翅睛,死亡現(xiàn)場離奇詭異声搁,居然都是意外死亡,警方通過查閱死者的電腦和手機捕发,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門疏旨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扎酷,你說我怎么就攤上這事檐涝。” “怎么了法挨?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵谁榜,是天一觀的道長。 經(jīng)常有香客問我凡纳,道長窃植,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任荐糜,我火速辦了婚禮巷怜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暴氏。我一直安慰自己延塑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布答渔。 她就那樣靜靜地躺著关带,像睡著了一般。 火紅的嫁衣襯著肌膚如雪研儒。 梳的紋絲不亂的頭發(fā)上豫缨,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天独令,我揣著相機與錄音,去河邊找鬼好芭。 笑死燃箭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舍败。 我是一名探鬼主播招狸,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邻薯!你這毒婦竟也來了裙戏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤厕诡,失蹤者是張志新(化名)和其女友劉穎累榜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灵嫌,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡壹罚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寿羞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猖凛。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绪穆,靈堂內(nèi)的尸體忽然破棺而出辨泳,到底是詐尸還是另有隱情,我是刑警寧澤玖院,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布菠红,位于F島的核電站,受9級特大地震影響司恳,放射性物質(zhì)發(fā)生泄漏途乃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一扔傅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烫饼,春花似錦猎塞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至比藻,卻和暖如春铝量,著一層夾襖步出監(jiān)牢的瞬間倘屹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工慢叨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纽匙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓拍谐,卻偏偏與公主長得像烛缔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轩拨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容