我有一个python脚本,可以在cloud 9本地运行良好。我正在将其迁移到fargate(代码构建)。我有一些常见的问题,我通过它没有找到python模块等,只是将它们添加到环境中。这些问题似乎已经解决了,但是我从python那里得到了一个非常奇怪的kill消息。这是我从日志中得到的错误信息;
ERROR conda.cli.main_run:execute(33): Subprocess for 'conda run ['python', 'server.py']' command failed. (See above for error)
/opt/conda/envs/myenv/.tmpjsztda5o: line 3: 22 Killed python server.py
fargate日志奇怪地显示,每次运行时这些错误都会发生一点变化(它每2-3分钟就会产生一次新的运行尝试)。例如
ERROR conda.cli.main_run:execute(33): Subprocess for 'conda run ['python', 'server.py']' command failed. (See above for error)
/opt/conda/envs/myenv/.tmp3hrkajas: line 3: 21 Killed python server.py
这是Dockerfile.
FROM public.ecr.aws/lts/ubuntu:latest
RUN echo Updating existing packages, installing and upgrading python and pip.
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y
RUN apt-get install build-essential -y
RUN apt-get install g++ -y
RUN apt-get install gcc -y
RUN apt-get install gdal-bin -y
RUN which gcc
RUN echo $PATH
FROM osgeo/gdal:ubuntu-small-latest
FROM continuumio/miniconda3
WORKDIR /app
## Create the environment:
COPY environment.yml .
RUN conda env create -f environment.yml
#Make RUN commands use the new environment:
RUN echo "conda activate myenv" >> ~/.bashrc
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
# Demonstrate the environment is activated:
RUN echo "Make sure flask is installed:"
RUN python -c "import flask"
RUN echo Copy service directory
COPY ./PHREEQC /PHREEQC
COPY ./service /service
COPY ./temp_files /temp_files
COPY ./INPUT_DATA /INPUT_DATA
WORKDIR /service
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "python","server.py"]
如果你对如何开始调试这个问题有任何想法,请告诉我!
多亏了itamar,我能够通过增加容器的大小来解决这个问题
感谢itamar,这确实是内存问题,因此将ECR实例重新配置为稍微大一点的实例。
- 注销现有任务定义->
aws ecs deregister-task-definition --task-definition ecs_name:ID
- 注册新的任务定义和更新的大小。
大小→从cpu 256和内存512更改为->
"family": "fam_name",
"cpu": "1024",
"memory": "4096",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"....
然后
aws ecs register-task-definition --cli-input-json file://~/environment/aws-cli/task-definition.json
- 更新服务
aws ecs update-service --cluster name-Cluster --service name-Service --task-definition ecs_name:ID
希望这有帮助!!
如果您的进程正在被杀死(这与崩溃不同),那么最有可能的问题是它正在耗尽内存。
- Linux有启发式方法,它试图检测使用过多内存的应用程序,然后杀死-9s它们(macOS有类似的系统)。
- 在容器中,也有内存限制,当命中时将杀死您的进程。
有关其他症状,请参阅https://pythonspeed.com/articles/python-out-of-memory/。
第一个建议:给你的容器配置更多的内存。例如,如果你使用Fargate,你可以给你的任务更多的内存,最多30GB。如果30 gb是不够的,你需要运行它在其他地方或减少内存的使用。要了解内存使用情况,可以使用https://pythonspeed.com/fil/。您可以在https://pythonspeed.com/memory/找到减少内存使用的建议。