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