Asyncio 内存泄漏 (Python)

Asyncio with memory leak (Python)

我的(dockerized)应用程序在 Linux 内核终止之前消耗越来越多的内存,我遇到了问题。在容器的 docker logs 中,我只收到一条不祥的 Killed 消息,没有进一步的上下文 - 只有在检查内核日志 (cat /var/log/kern.log) 和 docker stats 之后,我才意识到发生了什么 - 内存使用量每秒增加约 10MB。

该应用程序是一个异步 grpc 服务器,具有多个并发任务(使用 return ensure_future(self._continuous_function) 来保持函数的任务正常运行,并使用 运行,异步以便服务器端点不被阻塞) .

我发现 ensure_future() 导致了我的内存泄漏问题 - 或者更确切地说是我使用它的 return。显然 return 意味着对原始任务的引用被保存在内存中(而不是被垃圾收集),并且该函数只有很短的等待时间与之相关(1ms) - 所以内存不断增加快.

因此,在消除泄漏后,我的应用程序现在消耗了大约 60MB 的非常稳定的内存。我希望这能帮助其他人,我找不到对这个确切问题的参考,这就是我在这里分享它的原因。