概要
最近,生产环境 EKS(Elastic Kubernetes Service)偶尔出现 POD 被强杀问题。
项目是 SpringBoot 框架,启动了优雅停机,并且配置了停机时长为 120 秒。既然是被强杀,那肯定是因为在 120 秒内没有正常停掉应用。
经过日志分析,是由于开了弹性伸缩,项目还没启动完就收到了 kill 信号,这时候启动线程和停机线程并行跑,导致被停掉的线程又被启动起来,最终导致优雅停机失败,过了 120 秒后,容器被 kill -9 了。
过程分析
为什么说“启动线程和停机线程并行跑,导致被停掉的线程又被启动起来”,难道 SpringBoot 就这么 LOW ,就不知道让启动线程跑完再执行停机线程?