微服務性能分析|Pyroscope 在 Rainbond 上的實踐分享
- 2022 年 8 月 16 日
- 筆記
隨着微服務體系在生產環境落地,也會伴隨着一些問題出現,比如流量過大造成某個微服務應用程序的性能瓶頸、CPU利用率高、或內存泄漏等問題。要找到問題的根本原因,我們通常都會通過日誌、進程再結合代碼去判斷根本原因。對於微服務龐大的業務,這必定會很耗時,而且也很難及時找到關鍵問題點。
本文將介紹一個 持續性能分析平台 Pyroscope,它能夠幫助我們快速找到內存泄漏、CPU利用率高的代碼。
什麼是 Pyroscope?
Pyroscope 是一個開源的持續性能分析平台。它能夠幫你:
- 查找代碼中的性能問題
- 解決 CPU 利用率高的問題
- 定位並修復內存泄漏
- 了解應用程序的調用樹
- 跟蹤隨時間的變化
Pyroscope 可以存儲來自多個應用程序長期的分析數據;可以一次查看多年的數據或單獨查看特定的事件;較低的 CPU 使用;數據壓縮效率高,磁盤空間要求低;快捷的 UI 界面;
Pyroscope 架構
Pyroscope 由兩個主要組件支撐運行:Pyroscope Server 和 Pyroscope Agent。
Pyroscope Agent:記錄並匯總您的應用程序一直在執行的操作,然後將該數據發送到 Pyroscope Server。支持多種語言,GO、Python、Ruby、eBPF、JAVA、Rust、PHP、NodeJS、.NET
Pyroscope Server: 處理、聚合和存儲來自代理的數據,以便在任何時間範圍內快速查詢。片刻後可以查看分析數據,並在任何時間範圍內進行查詢。
與 Rainbond 集成架構
1.集成 Pyroscope Agent:
使用 Rainbond 插件的機制在微服務組件內安裝 Pyroscope Agent 插件,該插件會將 pyroscope.jar
通過 javaagent 方式啟動 java -javaagent:pyroscope.jar -jar app.jar
2.依賴 Pyroscope Server:
將安裝了 Pyroscope Agent 插件微服務組件都依賴至 Pyroscope Server。
實踐步驟
本文將基於微服務框架 Pig 進行實踐,步驟為:
- 部署微服務 Spring Cloud Pig,Gitee://gitee.com/log4j/pig
- 部署 Pyroscope Server
- 安裝 Pyroscope Java Agent 插件並配置
- 建立微服務與 Pyroscope 之間的依賴關係
- Pyroscope 基本使用
Rainbond 部署請參閱文檔 快速安裝
1. 部署微服務 Spring Cloud Pig
通過開源應用商店一鍵安裝 Spring Cloud Pig,新增 -> 基於應用商店創建組件 -> 在開源應用商店中搜索 SpringCloud-Pig
並安裝到指定應用中。
2. 部署 Pyroscope Server
通過開源應用商店一鍵安裝Pyroscope Server,新增 -> 基於應用商店創建組件 -> 在開源應用商店中搜索 Pyroscope
並安裝到指定應用中。
3. 安裝 Pyroscope Java Agent 插件並配置
- 插件 -> 從應用商店安裝插件,搜索
Pyroscope-Java-Agent
進行安裝。
- 為每個微服務組件都開通插件,進入微服務組件 -> 插件 -> 開通插件
Pyroscope-Java-Agent
並更新組件。
- 為每個微服務組件都設置以下環境變量,可在組件內 -> 環境變量 -> 添加變量。也可以通過應用配置組為所有組件統一配置
JAVA_OPTS
環境變量,而PYROSCOPE_APPLICATION_NAME
環境變量是唯一的,不可統一配置。
變量名 | 變量值 | 說明 |
---|---|---|
JAVA_OPTS | -javaagent:/agent/pyroscope.jar | Java agent 啟動參數 |
PYROSCOPE_APPLICATION_NAME | pig.auth | 微服務模塊名稱 |
4. 建立微服務與Pyroscope之間的依賴關係
將所有微服務組件添加依賴連接到 Pyroscope,切換到編排模式進行依賴關係建立,並更新或重啟所有微服務組件使依賴關係生效。
5. Pyroscope 基本使用
訪問 Pyroscope 的 4040 對外服務端口,即可訪問 Pyroscope UI。
在 Single View 視圖中,可以通過 Application 選擇服務。它可以顯示某一段時間內的火焰圖,也可以使用表格展示或者同時展示,火焰圖可以看到微服務方法調用的性能指標。
在 Comparison View 視圖中,可以選擇不同的時間段進行比較,通過時間線拖拽即可。
在 Diff View 視圖中,可以進行兩個時間段的差異比對,這通常在排查微服務的CPU、內存泄漏時很有效。
最後
Pyroscope 還可以結合 Jaeger 一起使用,可以集成在 Jaeger UI 中,可參閱 Jaeger UI 集成
Rainbond 是一個雲原生應用管理平台,核心100%開源、使用簡單、不需要懂容器和Kubernetes,支持管理多種Kubernetes集群,提供企業級應用的全生命周期管理。