我使用flask编写了Python程序,它从MongoDB中读取一些数据。但在服务器上运行程序几个小时后,它开始通过MongoDB填充服务器内存,直到所有服务器内存都用完为止。
运行程序时服务器资源的状态
几个小时后,服务器资源的状态如下
几个小时后的服务器资源状态
我使用过的技术
- docker上的MongoDB
- python 3.8
- 烧瓶2.0.2
- pymongo 4.0.1
- gunicorn 20.1.0
Docker文件
FROM python:3.8.7-buster
WORKDIR /flask_app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
ENV FLASK_APP=server.py
CMD ["gunicorn", "server:app", "-w", "2","--log-level" ,"DEBUG", "--threads", "2", "-b", "0.0.0.0:5000"]
事实上,这个问题是由于MongoDB缓存系统造成的。
为了解决这个问题,您必须限制MongoDB的RAM消耗量。
这不会降低MongoDB的性能,也不会对其产生太大影响,但它确实解决了问题。
您需要将这些配置添加到docker园区配置中:
.......
deploy:
resources:
limits:
memory: 3G
reservations:
memory: 1G
command: --wiredTigerCacheSizeGB 0.25
.......
在这种情况下,MongoDB内存的消耗被固定在5.2,您可以调整您的消耗。
祝你好运:(