如何解决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 举报,一经查实,本站将立刻删除。