docker 上的内存使用量因容器 timeoutErrors 出现峰值

问题描述

我正在 docker 容器中运行循环 python 脚本。该脚本只是无限循环并通过 HTTP 请求从远程服务器收集数据(以 1 秒为间隔)。循环是通过 12 个进程完成的,每个进程有大约 1000 个线程,每个线程运行一个带有两个任务的 asyncIo 循环 像下面这样:

        async def getDataPeriodic():
            while True:
                self.getData(queue)
                await asyncio.sleep(self.sleepInterval)
        DataLoop = asyncio.get_event_loop()
        self.dataTask = entriesLoop.create_task(getEntriesPeriodic())

然后使用 run_forever 运行循环

我最近发现我的容器总是重新启动,问题似乎是内存过高的问题。从日志中,我的服务器会在多个请求中从远程服务器(这是常见的)收到多个“readTimeout”错误,并且会立即将 2Gb 的 ram 分配给永远不会解除分配的容器。

因此,在夜间发生多次类似错误后,我的容器将使我拥有的 16GB 内存饱和,然后重新启动,丢失一些有价值的内存数据(其本身永远不会超过 16GB)

我想知道是什么导致了这种情况以及如何释放该错误内存,这与打印到 stderr 的数据有关吗?我尝试使用 sysctl -w vm.drop_caches=1 清除缓存,但没有用。

我没有任何代码表明我知道肯定会重现该问题,因为它在启动 4 小时后发生,当时我的远程服务器开始为我的请求返回超时,这就是我在这里询问的原因。有人遇到过类似的问题吗?

编辑:

这是我的 dockerFile :

FROM python
ARG HOME_DIR_PATH
ARG WS_SERVER_PORT
RUN mkdir -p /home/app
workdir /home/app
copY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
copY . .
RUN ls
EXPOSE ${WS_SERVER_PORT}
CMD ["python","main.py"]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)