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

  • 2022 年 8 月 16 日
  • 筆記

隨着微服務體系在生產環境落地,也會伴隨着一些問題出現,比如流量過大造成某個微服務應用程序的性能瓶頸、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://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集群,提供企業級應用的全生命周期管理。