线上事故记录-docker与Java的恩怨情仇

起因

上周五新建了一个项目,在开发完成后,和运维沟通准备上到生产环境中,套用了现有服务的通用启动命名行:

1
java -jar Xms3072m -Xmx8192m app.jar & 2>1

然后一切准备就绪,jenkins打包一切顺利,然后顺利部署到生产环境,由于前端项目暂未部署,k8s使用的内网集群通信,暂时没有办法调用接口进行服务部署成功验证,但是在测试环境进行了充分测试,一切OK 。

在周五即将下班的时候,运维给我这边发消息,说我的服务没有部署成功,然后把日志给我发了过来,内容大致如下:

日志

服务启动日志并没有出现JVM的字样,日志一直没有打下去

经过

经过排查,发现服务没启动完成,突然想起来前几天碰到一个问题,就是当内存不足时,docker会自动kill掉容器。最终确认是服务的相关资源配置没给到位,被docker给强制关闭了。

询问运维给的相关配置内存为1G,但是我启动时设置的最小初始化内存为3G,此时被k8s认为资源不足,给kill掉,导致服务无限重启

结果

调整了启动参数为1G,服务顺利启动。

反思

该问题其实是一个非常简单的启动参数设置不合理导致的服务无法启动问题,也引申到了docker容器当内存不足时会自动kill掉相关容器的坑,所以需要记住合理配置服务的启动参数,另外尽量合理分配资源,让服务平稳安全运行。

0%