[心得] 使用 pyroscope adhoc 加速找到效能瓶颈

楼主: appleboy46 (小恶魔)   2022-03-11 21:10:59
部落格: https://bit.ly/pyroscope-adhoc
Youtube: https://www.youtube.com/watch?v=3WfR46Q_9Kk
大家在开发软件时,会快速迭代专案时程跟需求,功能越多,系统就会开始出现效能上的
瓶颈,而最快的解决方式就是先垂直扩展,把 CPU 跟内存先往上加,但是这是治标不
治本,所以之前有推荐大家一套如何在服务执行时,快速找到哪个地方执行较慢,请参考
之前的文章‘即时效能分析工具 Pyroscope’,Pyroscope 目前支援了很多语言,像是
Go, Python, Java, Ruby, Rust, PHP 及 .Net,如果你想要快速在本地端找到效能瓶颈
,请继续将本篇看完。底下会用 Go 语言实际范例教大家。
## 为什么要用 adhoc profiling
Pyroscope 近期内推出 adhoc profiling 功能,大家想看看为什么官方要推出此功能。
原本 Pyroscope 推出此开源平台可以让开发者在平台上线时,快速从时间点找到效能瓶
颈的地方,但是移动到该时间点时,你会看到很多噪声,而要持续检测,开发者需要一直
进行测试,而这方式无法在本地端快速验证出来。
所以 Pyroscope 目标是推出 adhoc profiling 功能,让开发者可以在本地透过
Pyroscope 快速验证及找到效能瓶颈,而不用运行一整个服务,只要将特定的流程抓出来
透过 Script 方式将效能数据产生出来,并且透过 Pyroscope CLI 直接读取看数据。
(中间许多代码,请直接上 Blog 文章)
## 线上 Profiling 服务
如果连本地端都不想安装任何环境,可以透过底下两个线上服务来完成。
* Upload and Share Interactive Flamegraphs[1]
* Playground[2]
可以将有效能问题的程式码放到 Playground 上,并分享给团队其他同仁,直接线上修改
测试即可,其实跟 Go 提供的 Playground 差不多意思。
[1]: https://flamegraph.com/
[2]: https://playground.flamegraph.com/playground
## 心得
有了这个功能帮助挺大的,尤其是想在本机端做一些效能上分析,虽然有 pprof 可以使
用,但是没有好的 UI 接口,还是很难缩短除错时间,而有了 adhoc 功能,还可以将数
据分享给其他同事一起来帮忙。毕竟服务正式上线后,不会将 pyroscope 功能启动,免
得服务受到效能上的影响,而在测试站就会随时监控,搭配 Prometheus + Grafana 找出
特定时间点效能变化。
上面第一段有提到,目前支援多种不同语言,大家在本地端就可以快速测试不同写法带来
不同的效能,而不是要将代码推上机器后才可以验证,真的缩短蛮多时间的。也可以在找
到问题同时,先将 HTML 档案附件在 Issue Tracking 系统上。
作者: et84121 (焦糖玛琦屎)   2022-03-12 03:19:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com