我有一个 Flask 应用程序在 EC2 上的容器中运行。启动容器时,docker 统计数据显示内存使用量接近 48MB。进行第一次 API 调用(从 s3 读取 2GB 文件)后,使用量上升至 5.72GB。即使 api 调用完成后,使用率也不会下降。
在点击请求时,使用量大约增加了文件大小的两倍,并且在几次请求之后,服务器开始提供内存错误 https://i.stack.imgur.com/lyuna.png
此外,在没有容器的情况下运行相同的 Flask 应用程序时,我们没有看到内存使用量有任何增加。
在使用 API 之前输出“docker stats ” https://i.stack.imgur.com/hwRRC.png
使用 API 后输出“docker stats ” https://i.stack.imgur.com/Ggl4V.png
Flask 应用程序 (app.py) 包含-
import os
import json
import pandas as pd
import flask
app = flask.Flask(__name__)
@app.route('/uploadData', methods=['POST'])
def test():
json_input = flask.request.args.to_dict()
s3_path = json_input['s3_path']
# reading file directly from s3 - without downloading
df = pd.read_csv(s3_path)
print(df.head(5))
#clearing df
df = None
return json_input
@app.route('/healthcheck', methods=['GET'])
def HealthCheck():
return "Success"
if __name__ == '__main__':
app.run(host="0.0.0.0", port='8898')
Docker 包含-
FROM python:3.7.10
RUN apt-get update -y && apt-get install -y python-dev
# We copy just the requirements.txt first to leverage Docker cache
COPY . /app_abhi
WORKDIR /app_abhi
EXPOSE 8898
RUN pip3 install flask boto3 pandas fsspec s3fs
CMD [ "python","-u", "app.py" ]
我尝试直接从 S3 读取文件以及下载文件然后读取它,但它不起作用。
任何将内存利用率降低到初始消耗的线索都会有很大的帮助!