【性能優(yōu)化】火焰圖實(shí)戰(zhàn)

1 火焰圖介紹

性能調(diào)優(yōu)利器:火焰圖《性能之巔》學(xué)習(xí)筆記之火焰圖 其之一都提到了《性能之巔》。

火焰圖(Flame Graph)是由 Linux 性能優(yōu)化大師 Brendan Gregg 發(fā)明的东揣,和所有其他的 profiling 方法不同的是嘶卧,火焰圖以一個(gè)全局的視野來看待時(shí)間分布,它從底部往頂部侦铜,列出所有可能導(dǎo)致性能瓶頸的調(diào)用棧钟鸵。(摘自性能調(diào)優(yōu)利器:火焰圖)

如何分析生成的火焰圖(摘自《性能之巔》學(xué)習(xí)筆記之火焰圖 其之一:
● 火焰圖頂部顯示了采樣過程中on CPU的方法棺耍。對(duì)CPU profiles,這些方法直接占用cpu資源俊卤。對(duì)于其他的profile害幅,這些方法導(dǎo)致了相關(guān)的內(nèi)核事件。
● 在火焰圖頂部尋找“高原”狀的方法狠怨,位于頂部的某個(gè)很寬的方法,表示其在采樣中大量出現(xiàn)棍苹。對(duì)于CPU profiles茵汰,這意味著這個(gè)方法經(jīng)常在CPU上運(yùn)行蹂午。
● 自頂向下看顯示了調(diào)用關(guān)系,上邊的方法被其下方的方法調(diào)用奥洼,以此類推晚胡。快速的從上往下瀏覽可以理解某個(gè)方法為什么被調(diào)用瓷患。
● 自底向上看顯示了代碼邏輯遣妥,提供了程序的全局視圖箫踩。底部的方法會(huì)調(diào)用其頂部的多個(gè)方法,以此類推锦担。自底向上看可以看到代碼的分支形成的多個(gè)小型的“塔尖”吱韭。
● box的寬度可以用來比較理盆,更寬的box意味著在采樣結(jié)果中更多的比例凑阶。
● 對(duì)于cpu profiles 來說,如果a方法比b方法寬姨俩,有可能是因?yàn)閍方法本身執(zhí)行需要使用比b方法更多的cpu。也有可能是a方法被調(diào)用的次數(shù)比b方法更頻繁调窍。采樣的最終結(jié)果并不能體現(xiàn)一個(gè)方法被調(diào)用多少次邓萨,所以這兩種情況都有可能菊卷。
● 如果一個(gè)方法頂部出現(xiàn)了兩個(gè)“大塔尖”,導(dǎo)致火焰圖中出現(xiàn)一個(gè)“大分叉”歉甚,這樣的方法很值得研究扑眉。兩個(gè)“塔尖”可能是被調(diào)用的兩個(gè)子方法腰素,也可能是條件語句的兩個(gè)不同分支。

2 性能分析

接下來以某微服務(wù)為例咧虎,來實(shí)際看一下如何優(yōu)化程序的性能计呈。

2.1 on-cpu 火焰圖

使用 arthas profiler 可以生成 on-cpu 火焰圖

推薦閱讀 arthas 的中文社區(qū)

$profiler start -e cpu
1.1.JPG

分析:addIotdaData 方法中大部分時(shí)間都用于日志打印捌显,結(jié)合代碼查看,發(fā)現(xiàn)每接收到一條數(shù)據(jù)都打印了日志理肺,因此在日志打印上占用了較多的 CPU妹萨。

1.2.JPG

分析:addIotdaData 上使用了兩次 aop炫欺,大約占用了12%左右的 CPU品洛。

2.2 off-cpu 火焰圖

使用 arthas profiler 可以生成 off-cpu 火焰圖

$profiler start -e lock
3.1.JPG

分析:絕大部分等待時(shí)間都是在 pulsar 的 producer 中,結(jié)合代碼查看帽揪,在發(fā)送數(shù)據(jù)時(shí)使用的是同步的方式转晰。

2.3 Hot/Cold 火焰圖

使用 arthas profiler 可以生成 Hot/Cold 火焰圖

$profiler start -e wall
4.1.JPG

cacheToken 耗時(shí) 10%,結(jié)合業(yè)務(wù)發(fā)現(xiàn)防嗡,這部分邏輯是不需要的蚁趁,可優(yōu)化实胸。

5.png

6.JPG

分析:tomcat 中非業(yè)務(wù)處理部分的耗時(shí)約為 30%庐完,比實(shí)際業(yè)務(wù)處理的耗時(shí)(25%)還要多,因此考慮使用更高性能的 web 容器淆党,比如 netty讶凉。

使用 arthas profiler 可以生成內(nèi)存火焰圖:

$profiler start -e alloc
7.2.JPG

分析:未發(fā)現(xiàn)有內(nèi)存泄露的現(xiàn)象懂讯。

3 性能測(cè)試

性能測(cè)試的四個(gè)主要指標(biāo):

響應(yīng)時(shí)間:指應(yīng)用系統(tǒng)從發(fā)出請(qǐng)求開始到收到最后響應(yīng)數(shù)據(jù)所需要的時(shí)間褐望。響應(yīng)時(shí)間是系統(tǒng)最重要的性能指標(biāo),直觀的反映了系統(tǒng)的“快慢”实蔽。
并發(fā)數(shù):系統(tǒng)能夠同時(shí)處理請(qǐng)求的數(shù)目减宣,這個(gè)數(shù)字也反映了系統(tǒng)的負(fù)載特性。對(duì)于網(wǎng)站而言贼邓,并發(fā)數(shù)即系統(tǒng)并發(fā)用戶數(shù)塑径,指同時(shí)提交請(qǐng)求的用戶數(shù)目填具,于此相對(duì)應(yīng),還有在線用戶數(shù)(當(dāng)前登錄系統(tǒng)的用戶數(shù))和系統(tǒng)用戶數(shù)(可能訪問系統(tǒng)的總用戶數(shù))誉简。
吞吐量:指單位時(shí)間內(nèi)系統(tǒng)處理的請(qǐng)求的數(shù)量盟广,體現(xiàn)件系統(tǒng)的處理能力筋量。對(duì)于網(wǎng)站,可以用“請(qǐng)求數(shù)/秒”或是“頁(yè)面數(shù)/秒”來衡量肋拔,也可以用“訪問人數(shù)/天”或是“處理的業(yè)務(wù)數(shù)/小時(shí)”等來衡量呀酸。TPS(每秒事務(wù)數(shù))也是吞吐量的一個(gè)指標(biāo)性誉,此外還有 HPS(每秒 HTTP 請(qǐng)求數(shù)),QPS(每秒查詢數(shù))等爆存。
吞吐量 = ( 1000 / 響應(yīng)時(shí)間 ms ) × 并發(fā)數(shù)
性能計(jì)數(shù)器:是描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)蝗砾。包括 System Load悼粮、對(duì)象與線程數(shù)、內(nèi)存使用菜循、CPU 使用申尤、磁盤與網(wǎng)絡(luò) I/O 等指標(biāo)衙耕。這些指標(biāo)也是系統(tǒng)監(jiān)控的重要參數(shù)橙喘,對(duì)這些指標(biāo)設(shè)置報(bào)警閥值胶逢,當(dāng)監(jiān)控系統(tǒng)發(fā)現(xiàn)性能計(jì)數(shù)器超過閥值的時(shí)候初坠,就向運(yùn)維和開發(fā)人員報(bào)警,及時(shí)發(fā)現(xiàn)處理系統(tǒng)異常锁保。

上述內(nèi)容摘自:性能壓測(cè)的時(shí)候南誊,隨著并發(fā)壓力的增加抄囚,系統(tǒng)響應(yīng)時(shí)間和吞吐量如何變化

不同并發(fā)下的性能表現(xiàn):

8.png

分析:200并發(fā)情況下,TPS與Response Time都比較穩(wěn)定穴亏,300并發(fā)時(shí)重挑,性能下降的比較厲害谬哀,250并發(fā)時(shí),性能開始下降且變得不穩(wěn)定谦屑。因此可以認(rèn)為篇梭,系統(tǒng)能夠穩(wěn)定支持的并發(fā)數(shù)在200左右恬偷,TPS在1800左右,響應(yīng)時(shí)間在50ms左右坦康。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涝焙,一起剝皮案震驚了整個(gè)濱河市孕暇,隨后出現(xiàn)的幾起案子妖滔,更是在濱河造成了極大的恐慌,老刑警劉巖沮翔,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件采蚀,死亡現(xiàn)場(chǎng)離奇詭異承二,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妆够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門神妹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸵荠,“玉大人伤极,你說我怎么就攤上這事∠ㄉ模” “怎么了齿税?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)词渤。 經(jīng)常有香客問我缺虐,道長(zhǎng)礁凡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮窟蓝,結(jié)果婚禮上运挫,老公的妹妹穿的比我還像新娘。我一直安慰自己峡继,他們只是感情好雇卷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布关划。 她就那樣靜靜地躺著,像睡著了一般裤翩。 火紅的嫁衣襯著肌膚如雪踊赠。 梳的紋絲不亂的頭發(fā)上每庆,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天缤灵,我揣著相機(jī)與錄音蓝晒,去河邊找鬼芝薇。 笑死作儿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晾嘶。 我是一名探鬼主播口注,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼寝志,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼材部!你這毒婦竟也來了唯竹?” 一聲冷哼從身側(cè)響起浸颓,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤产上,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后仪媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谢鹊,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡算吩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佃扼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎巢。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兼耀,靈堂內(nèi)的尸體忽然破棺而出压昼,到底是詐尸還是另有隱情挎扰,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布巢音,位于F島的核電站遵倦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏送粱。R本人自食惡果不足惜橡淑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掠哥。 院中可真熱鬧,春花似錦秃诵、人聲如沸续搀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禁舷。三九已至,卻和暖如春毅往,著一層夾襖步出監(jiān)牢的瞬間牵咙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工攀唯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洁桌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓侯嘀,卻偏偏與公主長(zhǎng)得像另凌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戒幔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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