优雅停止的核心是让在途请求自然完成而不中断长连接,同时拒绝新请求;应使用systemctl reload httpd或apachectl -k graceful,并先执行apachectl configtest校验配置。
apache http server 优雅停止,核心是让正在处理的请求自然完成,不中断长连接(如 keep-alive、websocket、大文件上传),同时拒绝新请求。它不是“杀进程”,而是通知父进程有序退出子进程。
用 systemctl reload 或 apachectl graceful
这是生产环境最推荐的方式:
- systemctl reload httpd(RHEL/CentOS)或 systemctl reload apache2(Debian/Ubuntu):触发优雅重载,父进程保留,旧子进程处理完手头请求后退出,新子进程用新配置接续服务
-
apachectl -k graceful:等价于发送
SIGUSR1信号,行为与 reload 一致;适合脚本调用或无 systemd 环境 - 执行前建议先校验配置:
apachectl configtest,避免 reload 失败导致服务中断
用信号直接控制(适合调试或容器场景)
若需绕过包装命令,可向主进程(父进程)发送信号:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
kill -USR1 <PID>:优雅重载,等同于
apachectl graceful,不中断在途请求 - kill -WINCH <PID>:优雅停止(graceful-stop),父进程不再拉新子进程,已存在的子进程处理完当前请求后自行退出,监听套接字保持打开直至所有连接结束
- ⚠️ 切勿使用
kill -HUP或kill -TERM单独操作——前者等效 restart(会中断请求),后者若未配合 graceful 逻辑可能直接终止
验证是否真正优雅
改完操作不能只看命令返回成功,要确认行为落地:
- 检查父进程 PID 是否不变(
cat /var/run/httpd/httpd.pid或ps -eo pid,ppid,comm | grep httpd),变了说明实际是重启 - 观察访问日志,确认新请求仍被记录,且旧连接(如长轮询、上传中请求)未出现
connection reset或503 - 对启用了
mod_status的站点,访问/server-status?auto,查看BusyWorkers逐步归零,IdleWorkers先升后降
配合后端服务下线(反向代理场景)
若 Apache 作为反向代理,需让后端节点先“排水”再停机:
- 修改
BalancerMember行,添加status=-D,例如:BalancerMember http://backend:8080 status=-D - 确保
lbmethod=bybusyness或byrequests,并启用mod_slotmem_shm(默认开启) - 访问
/balancer-manager,确认目标节点状态显示为D,且请求计数停止增长 - 后端应用应配合返回健康检查失败(如
/actuator/health返回DOWN),并主动释放资源

















