微服務效能分析|Pyroscope 在 Rainbond 上的實踐分享

語言: CN / TW / HK

隨著微服務體系在生產環境落地,也會伴隨著一些問題出現,比如流量過大造成某個微服務應用程式的效能瓶頸、CPU利用率高、或記憶體洩漏等問題。要找到問題的根本原因,我們通常都會通過日誌、程序再結合程式碼去判斷根本原因。對於微服務龐大的業務,這必定會很耗時,而且也很難及時找到關鍵問題點。

本文將介紹一個 持續效能分析平臺 Pyroscope,它能夠幫助我們快速找到記憶體洩漏、CPU利用率高的程式碼。

什麼是 Pyroscope?

Pyroscope 是一個開源的持續效能分析平臺。它能夠幫你:

  • 查詢程式碼中的效能問題
  • 解決 CPU 利用率高的問題
  • 定位並修復記憶體洩漏
  • 瞭解應用程式的呼叫樹
  • 跟蹤隨時間的變化

Pyroscope 可以儲存來自多個應用程式長期的分析資料;可以一次檢視多年的資料或單獨檢視特定的事件;較低的 CPU 使用;資料壓縮效率高,磁碟空間要求低;快捷的 UI 介面;

Pyroscope 架構

Pyroscope 由兩個主要元件支撐執行:Pyroscope ServerPyroscope 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 進行實踐,步驟為:

  1. 部署微服務 Spring Cloud Pig,Gitee:https://gitee.com/log4j/pig
  2. 部署 Pyroscope Server
  3. 安裝 Pyroscope Java Agent 外掛並配置
  4. 建立微服務與 Pyroscope 之間的依賴關係
  5. Pyroscope 基本使用

Rainbond 部署請參閱文件 快速安裝

1. 部署微服務 Spring Cloud Pig

通過開源應用商店一鍵安裝 Spring Cloud Pig,新增 -> 基於應用商店建立元件 -> 在開源應用商店中搜索 SpringCloud-Pig 並安裝到指定應用中。

2. 部署 Pyroscope Server

通過開源應用商店一鍵安裝Pyroscope Server,新增 -> 基於應用商店建立元件 -> 在開源應用商店中搜索 Pyroscope 並安裝到指定應用中。

3. 安裝 Pyroscope Java Agent 外掛並配置

  1. 外掛 -> 從應用商店安裝外掛,搜尋 Pyroscope-Java-Agent 進行安裝。

  1. 為每個微服務元件都開通外掛,進入微服務元件 -> 外掛 -> 開通外掛 Pyroscope-Java-Agent 並更新元件。

  1. 為每個微服務元件都設定以下環境變數,可在元件內 -> 環境變數 -> 新增變數。也可以通過應用配置組為所有元件統一配置 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叢集,提供企業級應用的全生命週期管理。