如何在Python中调试内存错误?跟踪内存使用的工具?

2024-04-19 10:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python程序,当我给它一个大文件时,它会死在内存错误中。有什么工具可以让我弄清楚内存的用途吗?

这个程序在较小的输入文件上运行良好。程序显然需要一些可伸缩性改进;我只是想弄清楚在哪里。”“先基准后优化”,正如一位智者曾经说过的那样。

(只是为了避免不可避免的“添加更多RAM”的答案:这是运行在一个32位WiXP盒与4GB RAM,所以Python可以访问2GB的可用内存。在技术上不可能添加更多内存。用64位Windows重新安装我的电脑是不实际的。)

编辑:噢,这是Which Python memory profiler is recommended?的副本


Tags: 文件工具内存答案程序编辑whichwindows
3条回答

Heapy是Python的内存分析器,这是您需要的工具类型。

在您的例子中,答案可能非常简单:不要一次读取整个文件,而是逐块处理文件。这可能非常简单或复杂,取决于您的使用场景。例如,对于大型文件,MD5校验和计算可以更有效地完成,而无需读取整个文件。后一种更改在某些SCons使用场景中显著减少了内存消耗,但使用内存分析器几乎无法跟踪。

如果您仍然需要内存分析器:eliben已经建议使用sys.getsizeof。如果不能切断,试试Heapy或Pympler。

最简单和轻量级的方法可能是使用Python的built in memory query capabilities,例如sys.getsizeof-只需在对象上运行它,以减少问题(即较小的文件),并查看需要多少内存。

相关问题 更多 >