【工具】亲测Py-Spy:无中断python性能监控分析器,pyspy, Pyflame, ptrace

很多钻研机器学习(深度学习)的朋友其实并不熟悉python语言本身,这就导致写完代码后,无法定位程序“瓶颈”。往往有同学写完训练(预测)模型,但是代码运行时就非常慢,却找不准原因。

David 这里就推荐一款开源性能分析工具:py-spy

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

py-spy会监控process_vm_readv系统调用的信息,从而抽样得到一个python进程的函数调用时间统计。把最耗时间的那些函数排在前面。

如上图,即使你的程序已经在运行中,你也可以运行以下命令进行无中断的性能监控与分析:

yy@desktop:~$  py-spy --pid 12345

其中12345是已经在运行中的进程号 。

虽然py-spy是用的外部抽样法收集信息,但已经非常说明问题了(并且时间越长越准) 。无论是读写IO,gpu模型运算,还是图像处理上的瓶颈,定位函数时都能留下线索。

当然py-spy也有它的一些缺点,如果你想监控其他用户的经常,你可能需要root或者sudo权限:

yy@desktop:~$  sudo env "PATH=$PATH" py-spy -p 12345

如果系统调用还是不能很好地监控,可以使用试试下面命令:

yy@desktop:~$  sudo env "PATH=$PATH" py-spy -p 12345 --nonblocking

另外,你还需要使用适当的统计方法(是跟踪单个函数?还是把函数和它的子进程总体统计?),py-spy也提供了这些选项:

与py-spy类似的还有pyflame也是利用类似ptrace的系统调用。但是py-spy同时支持python2和python3.

和传统的用cprofiletime时间模块的“插入代码式”性能统计的方法不同,py-spy和pyflame给我们另外一种选择。同时它也支持热力图的可视化:

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

参考文献:

  1. https://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script
  2. https://stackify.com/how-to-use-python-profilers-learn-the-basics/
  3. https://github.com/benfred/py-spy
  4. https://github.com/uber/pyflame
  5. http://man7.org/linux/man-pages/man2/ptrace.2.html

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注