python进程每天都在增加内存使用量

2024-05-15 07:51:32 发布

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

场景:

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

  • 我是python新手,所以无法通过手动检查代码/使用调试器来发现问题
  • 我不知道有任何工具可以很容易地发现问题,请建议一些工具或方法,可以帮助我发现问题。在
  • 我认为这可能是内存泄漏问题,或者是一个变量,它一次又一次地向它追加数据,但根本没有释放它。。。请给我指出一些参考资料,它们可以帮助我理解python中的这类问题。在

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

更新

我试图遵循这条线索Showing the stack trace from a running Python application,但我面临以下错误,这些错误无法完全解决。在

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

我试图找到这样一种方法,即钩住已经运行的进程并获取堆栈/内存信息。但还没有运气,请帮帮我。在


Tags: 工具数据方法内存代码进程错误场景
3条回答

使用Dowser帮助跟踪内存泄漏。它使用CherryPy作为一个web服务器,即使您没有开发web应用程序,它也可以从浏览器向您提供内存分配的视图。在

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

一般来说:Python在内存管理方面存在问题,尤其是在释放内存方面。 经常重启应用程序。另外,学习如何使用垃圾回收器'gc'并检查类似的线程

How do I profile memory usage in Python?

这是长期运行的python进程所表现出的一个众所周知的问题。改进了一些,但还没有完全解决问题。例如,Python使用自己的内存管理算法,这可能导致自己的堆碎片化。最好的策略是运行多个进程,并在每个进程达到高内存水印时优雅地重新启动。Apache也使用这个策略。在

相关问题 更多 >