python进程日复一日地增加内存使用量

时间:2011-02-21 18:02:50

标签: python performance memory memory-leaks

情境:

我有一个连续运行的python进程(直到我们手动停止 - 无限制)并通过每1分钟读取一些系统文件来收集数据。它启动时占用大约25 MB。但是,日常占用的内存量正在增加,15天后,内存占用量超过500 MB。

  • 我是一个python新手,所以无法通过手动/使用调试器来查找代码,
  • 我不知道有任何工具可以轻易发现问题,请提供一些工具或方法,以帮助我发现问题。
  • 我认为它可能是一个内存泄漏问题或一次又一次地向其添加数据的变量,并且根本不会释放它...请指出某些可以帮助我理解这些问题的参考文献在python。

希望细节足够清楚,更多细节让我知道,我可以澄清。

更新

我试图关注这个帖子Showing the stack trace from a running Python application,但我面临以下错误,而这些错误无法完全解决。

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

我搜索找出这样一个方法,挂钩已经运行的进程并获取堆栈/内存信息。但是没有运气,请帮助我。

3 个答案:

答案 0 :(得分:3)

使用Dowser来帮助跟踪内存泄漏。它使用CherryPy作为Web服务器,即使您没有开发Web应用程序,它也可以通过浏览器为您提供内存分配视图。

另请参阅this post,您可能会感兴趣。使用Dowser,您应该能够看到进程内存中出现了意外的对象。

答案 1 :(得分:1)

这是长时间运行的python进程所展示的众所周知的问题。已经进行了改进但尚未完全解决问题。例如,Python使用自己的内存管理算法,这可能导致自己的堆碎片化。最好的策略是运行多个进程,并在每个进程都达到高内存水印时正常重启。 Apache也使用这种策略。

答案 2 :(得分:-11)

一般来说:Python存在内存管理问题 - 特别是在释放内存方面。 定期重启应用程序是常见的做法。另外学习使用垃圾收集器'gc'并检查

之类的线程

How do I profile memory usage in Python?