2013-01-22 31 views
0

我有一个扭曲的应用程序不断因为内存问题而死亡。该程序规模不断扩大,在被OS关闭之前消耗了系统的所有内存。重新启动并重复。扭曲的过程是巨大的

这是一个虚拟服务器上,所以我增加了一倍的内存,这个问题解决了 - 守护稳定在1.25GB的内存

有谁我如何能最好的资料这个告诉你有什么建议/所有的记忆都被吸进去了?

如果应用程序的信息有帮助,我使用twisted reactor和internet.timer.TimerService来轮询数据库以通过三个“服务”更新项目。要处理的项目被推送到twisted.internet.defer.DeferredList中,并且它们的处理发生在deferToThread块中。在延迟的过程中,有一些阻塞操作(获取网页等)和大量的HTML解析(美丽的汤和其他库)。我建议reactor.threadpool大小为10,每个'服务'都会使用具有10个令牌的SemaphoreService进行线程化。我真的希望这个守护进程的内存最大可达400MB,而不是3倍。

回答

2

这是更多的想法如何调试我的扭曲的应用程序中的内存泄漏/使用问题的一般思想共享。 Twisted有一个ssh服务器支持,并且是我添加到几乎所有我的开发项目中的东西。 ssh提供了一个交互式python解释器访问方法,它具有python垃圾回收器可用和一些辅助函数,它们允许我a)检查来自同一类的实例的数量,b)启动和停止检查随时间计数和c)获得该类的所有参考。交互式解释器的好处在于,它允许对违规实例进行临时反省,与其他对象的关系以及它们所处理的进程的状态。迄今为止,这已证明是一种有价值的工具,可以准确找到我已忘记的确切位置/在我的项目中未发现ref参考文献的问题。

+0

哦,这是伟大的洞察力!谢谢!我一定会尝试这种方法! –

+0

扭曲的问题在你的下面,有内存泄漏发现的objgraph推荐。这实际上可以非常好地与我之前提到的ssh方法结合使用。有 - 你有它运行时调用瑞士刀交互式内存探索:) – jbreicis