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