Cloud Performance Platform:基於PProf的性能分析雲平台
- tcmalloc:一個高度優化的內存分配器,適合頻繁的小內存分配場景
- profiler:CPU採樣工具
- heap profiler:堆內存採樣工具
- heap check:內存檢查工具
- pprof:用於分析profiler/heapprofiler輸出數據,並生成各種格式輸出(PDF/SVG)
目前已經有大量服務通過集成gperftools的profiler和heapprofiler來支持在線調優,比如Impala。
為了支持在線調優,一般需要服務暴露幾個HTTP介面:
- /pprof/profile:提供一段時間內的CPU採樣數據
- /pprof/heapprofile:提供一段時間內的堆內存採樣數據
- /pprof/growth:提供一段時間內堆內存增長的數據
pprof收到的數據主要是所採樣進程的符號地址,需要翻譯為人類可理解的符號名,通常使用可執行文件的符號表來進行翻譯。
在小規模情況這種做法沒有任何問題,但擴展到一個大規模部署,大量開發人員/運維人員的場景時,會遇到幾個問題:
- 不是每台機器都安裝了pprof
- 不是每個人都了解怎麼使用pprof
- 不一定有許可權登錄具體的實體機器
好在pprof支持遠程採樣,只需要被採樣的服務提供兩個HTTP介面:
- /pprof/cmdline:提供服務啟動的命令
- /pprof/symbol:pprof會批量post過來一批地址,服務將地址翻譯為符號名
symbol要做的工作相當底層,我看到的集成pprof的服務很少有實現這個介面的。我實現了這個介面,可以參考。
symbol介面解決了遠程pprof的問題,但還需要進一步降低使用的難度。因此我這兩天利用業餘時間開發了一個簡單服務Cloud Performance Platform。
Cloud Performance Platform項目的目標是將使用pprof的難度降到最低,它提供了一個類似搜索引擎的界面。
用戶只需要提供在線服務埠,選擇採樣類型,即可得到採樣結果的SVG輸出,不如下面是一個CPU採樣的輸出。
除了pprof提供的SVG輸出,Cloud Performance Platform還提供火焰圖格式的輸出。
目前支持6種採樣類型:
- CPU:CPU採樣,默認30秒,輸出有向圖,可用於分析程序執行熱點
- HEAP:堆內存採樣,默認30秒,輸出有向圖,可用於分析內存申請熱點
- CPU FlameGraph:CPU採樣,默認30秒,輸出火焰圖,可用於分析程序熱點,已經長尾調用
- HEAP FlameGraph:HEAP採樣,默認30秒,輸出火焰圖,可用於分析內存申請熱點和異常申請流程
- Growth:內存增長,輸出有向圖,用於分析內存的增長異常,不如內存泄漏
- Growth FlameGraph:內存增長,輸出火焰圖,用於分析內存的增長異常的調用棧
無論是pprof輸出的有向圖,還是Brendan Gregg所設計的火焰圖,都是相當直觀的展現形式,可以快速幫助開發定位問題,我在工作中使用pprof解決了大量程序熱點,內存泄漏的問題。Cloud Perfmance Platform相信可以將pprof使用難度降到最低。
Cloud Perfmance Platform使用openresty開發,它的強大易用是我可以很快將服務搭建起來(雖然我的工程可能不那麼標準:)。
項目放在github:robbinfan/cloud-perf
玩的開心!
推薦閱讀:
※UWA優化日廈門站回顧 | 資深TA教你如何將藝術概念轉化為渲染代碼
※你應該知道的AssetBundle管理機制
※千億特徵流式學習在大規模推薦排序場景的應用
※Unity3D回合制手游《星辰奇緣》性能測評深度分析
※Unity匿名函數的堆內存優化