场景
Java应用,在凌晨定时任开始时运行一段时间后,会自动重启,导致定时任务失败。该应用使用Docker部署
分析
Docker应用运行一段时间自动重启可能的原因为容器分配的资源(如CPU、内存)不足,系统可能会杀死容器进程以释放资源。Docker随后可能会根据重启策略重启容器。
采用docker stats命令监控容器的资源使用情况, 同时手动触发定时任务。观察内存使用情况
发现 MEM USAGE 会接近LIMIT,判断为超内存导致的Docker重启
解决方案
去掉或增加Docker容器内存LIMIT的限制。
1、若采用Docker Compose则修改配置文件
deploy:resources:limits:memory: 12288M
2、若使用Docker则修改已运行容器的内存限制,使用 docker update 命令来动态调整内存限制。例如,如果您想要将一个已运行的容器的内存限制增加到1GB,可以使用以下命令:
docker update -m 1024m my-container
创建容器时设置内存限制
当您创建一个新的容器时,可以使用 docker run 命令,并配合 -m 或 --memory 参数来设置内存限制。例如,如果您想要创建一个使用512MB内存的Nginx容器,可以使用以下命令:
docker run -m 512m -d --name my-nginx nginx