在 py.test 执行期间分析 cpu 和内存使用情况

Profile cpu and memory usage during py.test execution

我面临以下项目。我想在一组性能测试套件的执行过程中创建显示 cpu 和内存级别的图片。如果有任何建议,我将不胜感激。

目前我正在考虑的唯一方法是使用命令 top 或 python 模块 psutil 并在测试的同时执行它们。但是我想知道是否已经存在更好的方法,可能是 py.test 插件。

能够将这些参数从一次执行与另一次执行进行比较真是太好了。

测试在 Linux (Ubuntu) 下执行。

有很多方法可以做到这一点,从获取广泛的系统统计数据然后对它们进行平均(顶部),到使用处理器硬件计数器(例如使用 Intel VTune)。

psutil 看起来非常好。我唯一的意见是确保你进行了多次测量,然后对它们进行平均以消除虚假尖峰等。

进行这些测量的其他一些可能方法是 /proc/[pid]/stat (see man page), time, or if you get really obsessive, you can use some programatic techniques, e.g. for Windows

这里是关于以编程方式获取基准值的 good discussion。它还讨论了一些您可能会陷入的陷阱,即使您不使用编程方法也应该熟悉这些陷阱。

英特尔有很多关于处理器基准测试的有用信息;这是他们的生计。

我唯一能做的其他评论是您需要 select 仔细检查您的基准。英特尔强调 CPU 因为这是他们最擅长的。其他公司也是如此。事实上,根据应用程序领域,有一大堆 other important factors 发挥作用。

查看不同的基于媒体的基准。它们可能比仅基于处理器时间的更合适。我不容易找到基准,但 bing 真是个奇迹。

函数的逐行计时和内存消耗有两个有用的工具:

安装简单

$ pip install line_profiler memory_profiler

要进行分析,请使用 @profile 修饰您的函数,然后使用 运行

$ python -m memory_profiler example.py$ python -m line_profiler example.py