docker inspect app -f '{{.State.ExitCode}}'
docker inspect app -f '{{.State.OOMKilled}}'
docker events --filter container=app --since 30m
docker inspect 里 ExitCode 一会儿 143 一会儿 137,重启策略反复把容器拉起来,上游只看到一片 502,日志中段还被覆盖了,看不出哪一次才是真正的原因。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:143 是收到 SIGTERM 后正常退出,137 表示被 SIGKILL 强杀,常见于优雅停机超时没退干净,或者内存超限被 cgroup 干掉,两种原因的修法完全相反,从日志时间就能分辨。
「容器退出码 143」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
处理上按这个顺序:先看 OOMKilled 这个字段 把内存不足的原因排除掉 再看别的;再核对容器的停机超时和应用实际退出耗时是否对得上;把退出码和日志时间点对齐 才能定位是哪一次被杀。
确认没问题再收工,能说清每次退出是被谁杀的,重启次数不再无规律上涨,告警也少了。
