当网站上线后,流量增加或短暂功能故障,都会造成使用者体验相当不好,而这时该怎么快速找到性能的瓶颈呢?通常CPU冲到100%时,有时候也蛮难复制及找出关键问题点。本篇会介绍一套工具叫pyroscope,让开发者可以快速找到性能瓶颈的代码。之前也写了相关的性能瓶颈文章,可以参考看看『Go语言用pprof找出代码性能瓶颈』或『善用Go语言性能测试工具来提升执行效率』,上述两篇都是针对Go语言的性能分析文章,而pyroscope目前可以支持在Python,Ruby或Go的环境。底下笔者会针对Go环境做介绍。
什么是Pyroscope?
Pyroscope是一套开源的性能即时监控平台,简单的Server及Agent构架,让开发者可以轻松监控代码性能,不管你要找10秒或几分钟内的性能数据,都可以快速的即时呈现,开发者也不用在意装了此监控会造成任何性能上的负担。Pyroscope背后的储存采用Badger这套Key-Value数据库,性能上是非常好的。目前支持3种语言(Python,Ruby及Go)未来会预计支持NodeJS。假设您还没导入任何性能分析工具或平台,那Pyroscope会是您最好的选择。
Pyroscope构架
如果你有打算找性能分析工具平台,Pyroscope提供了三大优势,让开发者可以放心使用
1. 低CPU使用率,不会影响既有平台
2. 可储存好几年的数据,并且用10秒这么细的颗粒度查看数据
3. 压缩储存数据,减少浪费硬盘空间
构架只有分Server跟Agent而已,可以参考底下构架图,除了Go语言之外,Python跟Ruby App都是通过pyroscope指令启动相关app来监控系统性能。底下构架图来自官方站点

启动Pyroscope服务
启动方式有两种,第一是直接用docker指令启动

另一种可以用docker-compose启动

在Go里面安装agent
本篇用Go语言当作示例,先import package

接着在main.go写入底下代码即可:

其中http://pyroscope可以换成自定义的hostname即可,接着打开上述网址就可以看到性能监控的画面了

通过画面可以快速找到是SQL或哪个函数执行很久
心得
这套工具相当方便,在Go语言虽然可以用pprof快速找到问题,但是难免还是需要手动的一些地方才可以查出性能瓶颈,有了这套平台,就可以将全部App都进行监控,当使用者有任何问题,就可以快速通过Pyroscope查看看哪边代码出了问题。