情境:
我有一个连续运行的python进程(直到我们手动停止 - 无限制)并通过每1分钟读取一些系统文件来收集数据。它启动时占用大约25 MB。但是,日常占用的内存量正在增加,15天后,内存占用量超过500 MB。
希望细节足够清楚,更多细节让我知道,我可以澄清。
更新
我试图关注这个帖子Showing the stack trace from a running Python application,但我面临以下错误,而这些错误无法完全解决。
我搜索找出这样一个方法,挂钩已经运行的进程并获取堆栈/内存信息。但是没有运气,请帮助我。
答案 0 :(得分:3)
使用Dowser来帮助跟踪内存泄漏。它使用CherryPy作为Web服务器,即使您没有开发Web应用程序,它也可以通过浏览器为您提供内存分配视图。
另请参阅this post,您可能会感兴趣。使用Dowser,您应该能够看到进程内存中出现了意外的对象。
答案 1 :(得分:1)
这是长时间运行的python进程所展示的众所周知的问题。已经进行了改进但尚未完全解决问题。例如,Python使用自己的内存管理算法,这可能导致自己的堆碎片化。最好的策略是运行多个进程,并在每个进程都达到高内存水印时正常重启。 Apache也使用这种策略。
答案 2 :(得分:-11)
一般来说:Python存在内存管理问题 - 特别是在释放内存方面。 定期重启应用程序是常见的做法。另外学习使用垃圾收集器'gc'并检查
之类的线程