使用docker stack deploy部署的程序出现:task: non-zero exit (137),并自动重启。(一般出现在部署的java程序中)
造成该问题的原因一般有下面几种情况:
1. 通过docker stop ,或者kill -9 会出现 exit code 137
2. OOM,内存不足导致的退出,通过 journalctl -k | grep -i -e memory -e oom 查看系统出现的oom事件
一般需要确定是否是内存不足导致的退出。
本文中出现该问题的原因是docker容器启动时设置了最大内存限制,而容器中java程序运行所需内存设置的数值大于等于容器配置的最大内存,导致程序运行一段时间后自动重启。
docker 中 jvm内存往往出现大于xmx问题,除了参数优化外,还可以使用openj9 虚拟机(JVM的另一个实现)内存占用会减少很多。
一般jvm异常退出,配置了oom dump但没有dump文件,gc日志没有异常,要考虑内存不足被系统kill了。
参考: