開源持續(xù)性能剖析平臺 Pyroscope

性能剖析是動態(tài)代碼分析的一種形式,你可以在應用運行時捕獲應用的特征,然后使用這些特征信息確定如何使應用更快、更高效。但是對于線上生產(chǎn)環(huán)境來說很難捕獲到現(xiàn)場,所以捕獲線上 profile 的時候有一定難度,Google 在論文《Google-Wide Profiling: A Continuous Profiling Infrastructure for Data Centers》(https://research.google/pubs/pub36575/) 中介紹了內(nèi)部的 Profilling 系統(tǒng),簡稱 GWP,GWP 能夠持續(xù)地對跨數(shù)據(jù)中心的基礎設施進行 profilling,獲取包括了棧調(diào)用,硬件事件,堆 profile,內(nèi)核事件等等信息,并進行后續(xù)的數(shù)據(jù)分析,這個就是現(xiàn)在比較熱門的持續(xù)性能剖析。
介紹
持續(xù)性能剖析是指對在生產(chǎn)環(huán)境中執(zhí)行的應用進行性能剖析,此方法可緩解為生產(chǎn)環(huán)境開發(fā)準確的預測負載測試和基準的需求。與 metrics 類似,pprof 也是通過 HTTP 端點進行暴露,那么如果像 Prometheus 一樣,每隔一段時間定期去抓取程序的 profiles 并存儲在 TSDB 中,后續(xù)出現(xiàn)問題了再去查詢那個時間段的 profiles,就能夠很方便地定位到問題,這個就是基本的實現(xiàn)思路。

我們今天要介紹的 Pyroscope 就是這樣的一個開源持續(xù)性能剖析平臺,號稱調(diào)試性能問題僅需一行代碼,目前已經(jīng)有 3.4k ????。
演示地址:https://demo.pyroscope.io/
下圖顯示了使用 pyroscope 運行的一個典型應用程序的基本架構:

特性:
可以存儲多個應用程序長時間的剖析數(shù)據(jù) 可以一次查看長時間的數(shù)據(jù),也可以單獨查看特定的事件 低 CPU 開銷 數(shù)據(jù)壓縮效率高 友好的用戶界面 支持 Go、Ruby、Python 以及 Linux eBPF
使用
只需要下面幾條命令即可測試使用 pyroscope:
# install pyroscope
brew install pyroscope-io/brew/pyroscope
# start pyroscope server:
pyroscope server
# in a separate tab, start profiling your app:
pyroscope exec python manage.py runserver # If using Python
pyroscope exec rails server # If using Ruby
# If using Pyroscope cloud add flags for server address and auth token
# pyroscope exec -server-address "https://your_company.pyroscope.cloud" -auth-token "ps-key-1234567890" python manage.py runserver
倉庫地址:https://github.com/pyroscope-io/pyroscope
