我的(dockerized)应用程序有一个问题,它消耗的内存量不断增加,直到 Linux 内核终止为止。在容器的docker logs
我只得到了一个不祥的Killed
没有进一步上下文的消息 - 仅在检查内核日志 ( cat /var/log/kern.log
) 和 docker stats
之后我是否意识到发生了什么 - 内存使用量每秒增加约 10MB。
该应用程序是异步的 grpc
- 具有多个并发任务的服务器(使用 return ensure_future(self._continuous_function)
保持函数任务的启动和运行,异步,因此服务器端点不会被阻止)。
最佳答案
我发现 ensure_future()
导致了我的内存泄漏问题 - 或者更确切地说是我使用它的 return
。显然,返回意味着对原始任务的引用被保存在内存中(而不是被垃圾收集),并且该函数只有一个非常短的与之相关的等待时间(1毫秒) - 因此内存不断快速积累。 p>
因此,在消除泄漏后,我的应用程序现在消耗了大约 60MB 的非常稳定的内存。我希望这对其他人有帮助,我找不到这个确切问题的引用资料,这就是我在这里分享它的原因。
关于python-asyncio - 具有内存泄漏的异步 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69521780/