Python进程日益增加内存使用率

5 投票
2 回答
1941 浏览
提问于 2025-04-16 12:14

场景:

我有一个Python程序,它会一直运行(直到我们手动停止,基本上是无限的),每隔一分钟就会读取某些系统文件来收集数据。刚开始运行时,它大约占用25MB的内存。但随着时间的推移,内存占用量逐渐增加,经过15天后,内存占用超过了500MB。

  • 我还是个Python新手,所以无法通过手动查看代码或使用调试工具来找出问题。
  • 我不知道有什么工具可以轻松发现这个问题,请推荐一些工具或方法,帮助我找到问题所在。
  • 我猜这可能是内存泄漏的问题,或者是某个变量不断地追加数据,但从来没有释放掉... 请给我一些参考资料,帮助我理解Python中这类问题。

希望这些信息足够清楚,如果需要更多细节,请告诉我,我可以进一步解释。

更新

我试着跟进这个讨论 从正在运行的Python应用程序中显示堆栈跟踪,但遇到了以下错误,我无法完全解决。

  • 当前上下文中没有符号 "PyEval_EvalFrameEx"。
  • 当前上下文中没有符号 "PyStringObject"。

我搜索过想找到一种方法,可以挂钩到已经运行的进程中,获取堆栈/内存信息。但到现在为止还没有找到合适的方法,请帮帮我。

2 个回答

1

这是一个大家都知道的问题,主要出现在长时间运行的Python程序中。虽然已经做了一些改进,但问题并没有完全解决。例如,Python使用了自己的一套内存管理方法,这可能会导致内存的碎片化。最好的办法是同时运行多个进程,并在每个进程的内存使用达到高峰时优雅地重启它们。Apache也是采用这种策略。

3

可以使用 Dowser 来帮助追踪内存泄漏。它使用 CherryPy 作为网络服务器,即使你不是在开发网页应用,它也能让你通过浏览器查看内存分配的情况。

另外,你可以看看 这篇文章,可能会对你有帮助。使用 Dowser,你应该能看到在你的程序内存中有哪些意外的对象还在占用空间。

撰写回答