尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SpringBoot优雅停机,别再kill-9了
线上发布时你有没有用过kill -9强行终止应用进程瞬间消失部署脚本跑得飞快看起来一切正常。但用户那边可能正在提交订单、正在支付回调、正在上传文件——这些请求在毫秒之间被腰斩数据写了一半消息发了一半分布式锁没释放数据库连接没归还。一次kill -9的代价可能是一批用户投诉、一笔对账差账、甚至一次线上故障。从 Spring Boot 2.3 开始框架正式内置了优雅停机功能覆盖 Tomcat、Jetty、Undertow 和 Reactor Netty 四种内嵌 Web 服务器。但直到今天很多团队依然没有开启它。开启优雅停机只需要两行配置在application.yml中加上两个配置项即可text复制下载server: shutdown: graceful spring: lifecycle: timeout-per-shutdown-phase: 20s第一行告诉 Spring Boot 收到关闭信号后不要立即终止而是先停止接收新请求再等待正在处理的请求完成。第二行设置宽限期默认值是 30 秒超过这个时间仍未完成的请求会被强制中断。不同 Web 服务器的行为略有差异Tomcat、Jetty 和 Reactor Netty 在网络层直接拒绝新连接Undertow 则会接受新请求但立即返回 503因为它的线程模型决定了“不接收”不如“快速拒绝”更安全。Kubernetes 环境下仅靠 Spring Boot 配置还不够如果你在 K8s 中部署有一个关键陷阱Spring Boot 的优雅停机处理的是“已经到达 Pod 的请求”但它无法阻止 Kubernetes 在 Pod 被摘除之前继续向它转发新流量。K8s 默认在发送 SIGTERM 信号的同时就开始了从 Service Endpoint 中移除 Pod 的操作——但负载均衡器的状态同步存在延迟。正确的做法是在 Deployment 中配置preStopHook在 SIGTERM 发出前预留一段缓冲时间text复制下载lifecycle: preStop: exec: command: [/bin/sh, -c, sleep 15]这 15 秒的作用是让 K8s 有足够时间将这个 Pod 从 Endpoint 中摘除确保所有新流量已经停止转发到该实例。之后再发送 SIGTERMSpring Boot 才开始优雅停机流程。同时terminationGracePeriodSeconds必须大于preStop的 sleep 时间加上 Spring Boot 的宽限期否则容器还没完成清理就会被 K8s 强制杀死。别忘了清理你自定义的资源Spring Boot 的优雅停机默认只负责 Web 层的请求排空。如果你在代码中自定义了线程池、调度器或消息队列监听器这些资源需要你自己在PreDestroy方法中关闭。线程池的优雅关闭关键在两个参数setWaitForTasksToCompleteOnShutdown(true)让线程池在关闭前等待队列中的任务执行完毕setAwaitTerminationSeconds(60)设置最大等待时间。对于数据库连接池可以在PreDestroy中先暂停连接借出再等待活跃连接归还。有一个容易被忽略的坑如果你的线程池是通过new关键字自己创建的而不是交给 Spring 容器管理PreDestroy不会被调用必须手动注册销毁逻辑。从“启动时优雅”到“关闭时优雅”Spring Boot 优雅停机的意义不在于它用了多复杂的技术——底层不过是 JVM 的 Shutdown Hook 机制。它的真正价值在于提醒我们一个服务的生命周期不应该只有“启动”和“运行”两个状态。关闭同样是一个需要认真设计的阶段它决定了你的系统在滚动更新、弹性扩缩容、故障迁移时是让用户无感还是让用户买单。下次发布时把kill -9换成kill -15把那两行配置加上。这不是一个需要纠结的技术选型而是一个应该成为默认习惯的工程素养。
RELATED

相关推荐

PHP源码搭建AI聊天网站:API接口设计与LNMP部署实践

PHP源码搭建AI聊天网站:API接口设计与LNMP部署实践

简介:这套源码是一套面向PHP开发者、AI应用爱好者及网站二次开发者的轻量级在线聊天系统,核心程序压缩后仅23KB,部署门槛低,适合快速搭建或集成到现有项目。系统内置用户管理、一键添加与修改接口、在线AI多模型聊天、文转图、图转…

📅 2026/9/15 3:49:07
本地化视频剪辑工具:隐私安全与高效处理方案

本地化视频剪辑工具:隐私安全与高效处理方案

1. 项目概述:为什么我们需要本地化视频剪辑工具最近两年有个明显的趋势:越来越多的用户开始从在线视频编辑器回归到本地化工具。上周帮朋友处理一段婚礼视频时,他特别强调"必须用完全离线的工具",这个需求背后其实反映了…

📅 2026/9/15 3:44:07
Simulink双端供电线路潮流计算建模与实践

Simulink双端供电线路潮流计算建模与实践

1. 双端供电线路潮流计算概述在电力系统分析中,双端供电线路是最基础的网络结构之一。这种拓扑结构由两个电压源通过输电线路连接组成,常见于变电站间联络线、环形电网开环运行等场景。潮流计算作为电力系统稳态分析的核心,需要准确求解各节点…

📅 2026/9/15 3:44:07
MORE NEWS

更多资讯

📰

Vite打包Vue项目Nginx部署避坑指南:从路径配置到刷新404

我想先说一个比较反直觉的结论:Vite打包默认出来的文件,如果你直接丢到Nginx的root目录里,大概率能跑,但只要你的项目里用了路由懒加载、图片资源引用了绝对路径、或者你想把前端项目挂到某个子路径下面,就会立刻翻车。…

📰

视觉提示词注入攻击:原理、实现与防御方案

1. 项目概述:视觉提示词注入攻击的本质与危害视觉提示词注入攻击(Visual Prompt Injection)是近年来AI安全领域涌现的新型攻击手段,它通过精心构造的视觉输入干扰多模态大模型的生成过程。与传统文本提示词注入不同,这…

📰

通信数据备份系统设计与实战经验分享

1. 通信数据备份与保障的核心价值在数字化时代,通信数据已成为企业和个人的核心资产。我经历过多次因数据丢失导致的业务中断,深刻体会到一套可靠的备份系统有多重要。通信数据备份不仅仅是简单的文件拷贝,而是需要综合考虑数据类型、存储介质…

📰

前端实习二面通关秘籍:原理、场景与工程化实战

1. 接到面试通知后,先把这个公司研究透前端实习二面通常不是纯背书局。一面已经筛过一轮基础,二面会明显往“原理、设计、综合能力”方向倾斜。MiniMax作为一家做多模态大模型方向的公司,前端在里面承担的更多是工具链、Web端交互、可视化产品…

📰

Cave项目从零搭建:UE4 nDisplay多屏集群配置实战指南

接手第一个Cave项目时,我差点被nDisplay这一堆术语劝退。Cluster、Node、Viewport、ProjectionPolicy,每个词单独看都懂,拼在一起就变成了天书。当时我用的就是UE4,项目要从零搭一个三面CAVE展示空间,网上资料零零散散…

📰

Qt飞机大战实战:QPainter逐帧绘图与QTimer游戏循环

简介:基于 C 语言与 Qt 应用框架的飞机大战小游戏项目,代码均经过实际运行测试,功能完整,可直接用作课程设计、毕业设计或新手进阶的练习素材。面向计算机、人工智能、通信工程、自动化、电子信息等专业的在校学生、老师及企业开发…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬