0

由于内存问题,我拥有的一个 Twisted 应用程序经常被杀死。程序变大了,在被操作系统关闭之前消耗了系统的所有内存。重新启动并重复。

这是在虚拟服务器上,所以我将内存加倍,问题解决了 - 守护进程稳定在 1.25GB 左右的内存

有没有人对我如何最好地描述这个来判断所有内存被吸入的内容/位置有什么建议?

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

4

1 回答 1

2

这更像是我如何在扭曲的应用程序中调试内存泄漏/使用问题的一般想法。Twisted 有一个 ssh 服务器支持,这是我添加到几乎所有开发项目中的东西。ssh 提供了一个交互式 python 解释器访问该方法的方法,该方法具有可用的 python 垃圾收集器和许多帮助函数,这些函数允许我 a) 检查来自同一类的实例的计数,b) 开始和停止检查该计数的变化随着时间的推移和 c) 获取该类的所有引用。交互式解释器的好处是它允许对违规实例、它们与其他对象的关系以及它们所处的进程状态进行临时内省。

于 2013-01-23T07:57:36.990 回答