Python production profiling

Python项目遇到性能问题时,如果可以做Profiling会对查找性能瓶颈很有帮助。

Python自带的cProfile模块可以对某个函数或脚本进行profiling,但其不支持多线程,对于长时间运行的服务程序也不太友好。

py-spy#

https://github.com/benfred/py-spy

对于生产服务进行profiling的利器,其可以直接对运行中的进程进行profiling,支持多线程。

py-spy使用采样的方式,可以避免对生产服务产生影响,采样率可以设置。

完成profiling后会生成火焰图,方便查看。

使用py-spy可能会遇到一些障碍,其在Mac系统下需要关闭某个安全设置才能正常工作,在Docker里面需要在启动容器时设置一个权限才能工作。

这些问题在网上都可以找到解答,综合来看,py-spy还是在生产环境进行profiling最好的工具!

django-cprofile-middleware#

https://github.com/omarish/django-cprofile-middleware/

可以对Django的某个接口进行cProfile,方便获取接口的性能数据。

它可以在线展示结果,展示效果与python命令行差不多,是列表形式,也可以将文件下载后,通过SnakeViz等工具查看。

django-silk#

https://github.com/jazzband/django-silk

对Django进行profiling的另外一个工具,其提供在线的展示和查看功能。

django-silk会将所有接口的profile数据存储到自己的表中,所以最好不要在生产环境下使用。

参考资料#

https://medium.com/kami-people/profiling-in-django-9f4d403a394f

comments powered by Disqus