對(duì)于開(kāi)發(fā)及運(yùn)維人員來(lái)講,火焰圖是一個(gè)經(jīng)典的定位性能問(wèn)題的方法。利用火焰圖可以可視化系統(tǒng)資源(cpu占用、內(nèi)存占用、調(diào)度、IO等)的占用情況,從而幫助技術(shù)人員快速定位資源異常使用的代碼級(jí)根因,或者觀察潛在性能劣化趨勢(shì),進(jìn)而優(yōu)化系統(tǒng)和應(yīng)用的性能。
然而,現(xiàn)有流行的火焰圖工具往往存在一個(gè)或多個(gè)局限性,實(shí)際應(yīng)用場(chǎng)景比較有限。因此,openEuler上的開(kāi)源項(xiàng)目A-Ops中的gala-ops系列組件提供了適用于云原生的全棧持續(xù)性能監(jiān)測(cè)火焰圖。
傳統(tǒng)火焰圖在實(shí)際應(yīng)用中的痛點(diǎn)
1.傳統(tǒng)火焰圖工具相對(duì)獨(dú)立,難以對(duì)接第三方插件或集成到運(yùn)維系統(tǒng),在應(yīng)用中需要有經(jīng)驗(yàn)的開(kāi)發(fā)人員手動(dòng)結(jié)合其他調(diào)試工具分析定位。
2.由于開(kāi)銷較大,火焰圖大多僅僅作為工具在開(kāi)發(fā)和調(diào)試階段被使用,不能在生產(chǎn)環(huán)境中常態(tài)化部署。所以對(duì)于更常見(jiàn)的場(chǎng)景——即實(shí)際生產(chǎn)環(huán)境中的突發(fā)性的性能問(wèn)題,火焰圖并不是定位問(wèn)題的有效手段。
3.生產(chǎn)環(huán)境上中部署的應(yīng)用類型錯(cuò)綜復(fù)雜,語(yǔ)言紛繁多樣,而且很多應(yīng)用是會(huì)調(diào)用不同語(yǔ)言的模塊。但是每種火焰圖工具往往只針對(duì)單一類型的語(yǔ)言。即使同時(shí)部署了不同語(yǔ)言的火焰圖觀測(cè)工具,所生成的火焰圖數(shù)據(jù)又難以統(tǒng)一,從系統(tǒng)角度難以觀測(cè)不同語(yǔ)言應(yīng)用的性能占比。
4.傳統(tǒng)火焰圖往往只能觀測(cè)進(jìn)程,線程粒度,是host時(shí)代的工具。對(duì)于云原生系統(tǒng)更關(guān)注的容器粒度,傳統(tǒng)火焰圖無(wú)法直觀區(qū)分。
gala-ops火焰圖的四大特性
1.易于部署和集成
gala-ops是針對(duì)云基礎(chǔ)設(shè)施灰度故障的應(yīng)用級(jí)/系統(tǒng)級(jí)在線診斷工具,火焰圖探針stackprobe集成在其中的gala-gopher組件內(nèi)。用戶只需一鍵安裝gala-gopher后,在配置文件中開(kāi)啟或關(guān)閉火焰圖探針即可使用。具體的安裝部署說(shuō)明可參考gala-gopher文檔。
gala-ops火焰圖默認(rèn)會(huì)在本地生成svg格式的火焰圖。另外它也支持pyroscope和grafana等第三方運(yùn)維平臺(tái),僅需在配置文件中填上第三方插件的地址,火焰圖探針程序就會(huì)定期自動(dòng)將火焰圖數(shù)據(jù)上傳到遠(yuǎn)端以方便后續(xù)分析和實(shí)時(shí)監(jiān)測(cè)。
以下是gala-ops cpu火焰圖對(duì)接pyroscope和grafana的示例。通過(guò)選擇特定時(shí)間段,可以查看到該時(shí)間段的火焰圖,函數(shù)cpu占比排序,配合其他系統(tǒng)或應(yīng)用指標(biāo)可以很方便地發(fā)現(xiàn)和定位問(wèn)題。
2.容器支持
云原生系統(tǒng)中,應(yīng)用以容器形式部署。傳統(tǒng)火焰圖中在進(jìn)行系統(tǒng)級(jí)觀測(cè)時(shí),最多體現(xiàn)線程名稱,若不同容器示例內(nèi)線程名相同,則調(diào)用棧會(huì)合并在一起無(wú)法區(qū)分,影響后續(xù)定位定界。gala-ops火焰圖探針能夠自動(dòng)識(shí)別本機(jī)中的pod和container,并在圖里增加工作負(fù)載,容器和進(jìn)程號(hào)信息。
若進(jìn)程為工作負(fù)載/容器內(nèi)進(jìn)程,則分別以[Pod]和[Con]前綴標(biāo)記pod和container,進(jìn)程以[
效果圖參見(jiàn)下一段附圖,可見(jiàn)通過(guò)查看調(diào)用棧底部第一層,可以明顯區(qū)分主機(jī)進(jìn)程和容器進(jìn)程。
3.全棧支持
gala-ops火焰圖支持編譯型和解釋型語(yǔ)言的混合代碼調(diào)用棧解析。目前已支持的語(yǔ)言包括C,C++,GO,Rust,JAVA。不同語(yǔ)言的應(yīng)用,同一調(diào)用棧中不同語(yǔ)言的函數(shù)/方法,用戶態(tài)和內(nèi)核態(tài),均可在同一火焰圖中統(tǒng)一顯示。而且使用gala-ops火焰圖前不需要針對(duì)不同的語(yǔ)言做額外配置或重新部署應(yīng)用,即開(kāi)即用。
下圖顯示了一個(gè)實(shí)測(cè)生成的gala-ops cpu火焰圖,以右側(cè)的一個(gè)tomcat容器調(diào)用棧為例,從底層往頂層看調(diào)用關(guān)系:tomcat pod內(nèi)包含一個(gè)container,containter中有一個(gè)pid為2434466的java進(jìn)程,進(jìn)程內(nèi)cpu占用最多的是名為http-nio-8080-e的JVM線程,JVM調(diào)用了C庫(kù)函數(shù)thread_native_entry,再往上進(jìn)入了Java方法java.lang.Thread::run,然后經(jīng)過(guò)一系列的Java方法調(diào)用,最終走到了ksys_write系統(tǒng)調(diào)用,然后進(jìn)入內(nèi)核態(tài)函數(shù)。
這樣一個(gè)Java進(jìn)程從k8s層->OS層->JVM底層實(shí)現(xiàn)->Java方法->內(nèi)核態(tài)函數(shù)——完整的調(diào)用過(guò)程就可以通過(guò)gala-ops火焰圖追溯到。
4.低開(kāi)銷
gala-ops火焰圖基于ebpf技術(shù),精簡(jiǎn)堆棧采樣邏輯,實(shí)現(xiàn)保持采樣精度(cpu采樣頻率10ms)的同時(shí)對(duì)被觀測(cè)應(yīng)用性能影響很?。ㄒ话阍?%左右)。因此,大規(guī)模生產(chǎn)環(huán)境中也可以持續(xù)開(kāi)啟gala-ops火焰圖以實(shí)時(shí)觀測(cè)應(yīng)用性能,這樣即使出現(xiàn)應(yīng)用或系統(tǒng)故障,無(wú)需事后重現(xiàn)問(wèn)題,通過(guò)gala-ops火焰圖可以回溯以往任意時(shí)刻的系統(tǒng)狀態(tài)。
我們測(cè)試了開(kāi)關(guān)cpu火焰圖對(duì)不同應(yīng)用的性能影響:對(duì)于本身性能中等,吞吐量中等的應(yīng)用,例如tomcat,tps劣化在1%以下;對(duì)于本身性能較高,吞吐量大的應(yīng)用,例如kafka,tps劣化在2%以下。結(jié)果如下:
對(duì)比開(kāi)關(guān)cpu火焰圖探針對(duì)tomcat性能的影響:
對(duì)比開(kāi)關(guān)cpu火焰圖探針對(duì)kafka寫(xiě)入MQ消息性能的影響:
gala-ops火焰圖具有易于部署和集成,容器支持,全棧支持,低開(kāi)銷等特性,使得開(kāi)發(fā)者和維護(hù)者無(wú)論在開(kāi)發(fā)環(huán)境還是生產(chǎn)環(huán)境均可通過(guò)火焰圖的形式預(yù)測(cè)潛在問(wèn)題和定位已發(fā)生問(wèn)題。
功能的持續(xù)完善
目前gala-ops火焰圖已經(jīng)支持cpu占用,內(nèi)存泄漏兩種類型火焰圖,后續(xù)還會(huì)加入對(duì)其他系統(tǒng)資源的觀測(cè),例如調(diào)度、網(wǎng)絡(luò)IO、磁盤IO等。此外,對(duì)其他語(yǔ)言應(yīng)用的支持也在持續(xù)開(kāi)發(fā)中。
審核編輯:劉清
-
cpu
+關(guān)注
關(guān)注
68文章
11076瀏覽量
217001 -
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109568 -
SVG
+關(guān)注
關(guān)注
0文章
130瀏覽量
16884 -
OPS
+關(guān)注
關(guān)注
0文章
81瀏覽量
18500
原文標(biāo)題:A-Ops性能火焰圖——適用于云原生的全棧持續(xù)性能監(jiān)測(cè)工具
文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
EVAL-AD7785EBZ是一款完整的模擬前端,適用于低頻測(cè)量應(yīng)用
EVAL-AD7718EB,是一款完整的模擬前端,適用于低頻測(cè)量應(yīng)用
阿里云推出內(nèi)部操作透明化服務(wù) 為用戶提供全棧數(shù)據(jù)保護(hù)體系
一款適用于STM32的UI設(shè)計(jì)軟件
性能提升1倍,成本直降50%!基于龍蜥指令加速的下一代云原生網(wǎng)關(guān)
只需 6 步,你就可以搭建一個(gè)云原生操作系統(tǒng)原型
面向云原生的混沌工程工具-ChaosBlade

引領(lǐng)云原生2.0時(shí)代,賦能新云原生企業(yè)
華為云發(fā)布云原生2.0全景圖,結(jié)果和過(guò)程的雙重可信的高質(zhì)量
如何設(shè)計(jì)一款適用于各類電池尺寸、電壓和外形的電池測(cè)試儀

評(píng)論