我在xdist上使用py.test(版本2.4,在Windows 7上)为C++库运行许多数值回归和接口测试,C++库通过C模块提供Python接口.
随着时间的推移,测试的数量已增加到2,000个,但我们现在遇到了一些内存问题.无论是否使用xdist,运行测试的python进程的内存使用量似乎都在增加.
在单进程模式中,我们甚至看到了一些错误分配错误的问题,而使用xdist总内存使用可能会降低操作系统(8个进程,每个进程使用> 1GB).
这是预期的行为吗?或者在使用py.test进行大量测试时,是否有其他人遇到过同样的问题?我可以在tearDown(Class)中做些什么来减少内存使用量吗?
目前我无法排除问题存在于C/C++代码内部的可能性,但是当通过py.test之外的Python接口运行一些长期运行的程序时,我确实看到了相对恒定的内存使用情况. .当使用nose代替py.test时我也没有看到任何过多的内存使用(我们使用py.test,因为我们需要junit-xml报告来处理多个进程)
py.test 的内存使用量将随着测试数量的增加而增加。每个测试在执行之前都会被收集,并且对于每个测试运行,测试报告都会存储在内存中,对于失败,内存会更大,以便最后可以报告所有信息。所以在某种程度上,这是预料之中的,也是正常的。
然而我没有确切的数字,也从未仔细调查过这一点。我们之前确实在一些 CI 主机上耗尽了内存,但只是给了他们更多的内存来解决这个问题,而不是进行调查。目前我们的 CI 主机有 2G 内存,在一次测试运行中运行大约 3500 个测试,它可能只能完成一半的工作,但可能涉及更多交换。Pypy 也是一个能够使用 py.test 运行大型测试套件的项目,因此这当然是可能的。
如果您怀疑 C 代码泄漏内存,我建议构建一个(小)测试脚本,该脚本仅测试扩展模块 API(带或不带 py.test)并在无限循环中调用它,同时在每个循环后收集内存统计信息。经过几次循环后,内存不应再增加。
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |