在线服务优雅停机
场景描述
推理在线服务的优雅停机用于服务下线、升级、缩容、故障迁移等场景,目的是平滑结束在途请求、释放资源、保存状态、避免强制中断,保障业务连续性与数据完整性。
典型适用场景:
- 服务正常下线:业务迭代、版本更替、资源回收时,等待当前推理请求完成后再终止实例,避免客户端报错;
- 滚动升级:更新模型或镜像时,逐步优雅下线旧实例、拉起新实例,实现零中断平滑升级;
- 实例缩容:减少副本数、释放闲置资源时,优先优雅终止空闲实例,不影响正在处理的请求;
- 节点、硬件故障迁移:NPU、CPU、交换机异常触发迁移时,优雅停机保存临时推理上下文,减少任务失败;
- 大模型、长任务推理:流式、长文本推理耗时久,避免强制终止导致结果残缺、会话中断。
约束限制
- 健康检查联动:已配置健康检查的服务,开启优雅停机后,收到停止指令会强制延后 3 分钟再停止。
- 资源池限制:专属资源池和公共资源池均支持。
- 部署模式:基础模式、多角色分离模式均支持;多角色分离需所有推理单元统一配置。
- 命令依赖:停机命令依赖容器内基础工具(sh、kill、trap 等),依赖缺失会导致执行失败。
优雅停机配置操作
登录ModelArts管理控制台,在左侧菜单栏中选择“模型推理>在线推理”,进入在线服务管理页面。部署在线服务时,在“单元配置 > 更多配置”中勾选“优雅停机”,并设置“停机时间”和“停机命令”。具体操作请参见推理在线服务单机部署。
“停机时间(秒)”:建议普通服务 30s;大模型或长任务 60–300s。
“停机命令”(容器内执行),以下示例为3选1,只填写1条即可:
- 示例 1(终止进程)
kill -SIGTERM $(pgrep -f app.py)
适用:直接优雅终止业务主进程
原理:发送标准优雅终止信号,让进程自行收尾再退出
适用场景:Python 脚本、Flask/FastAPI 独立进程服务
- 示例 2(优雅退出)
trap 'exit 0' SIGTERM
适用:容器内脚本常驻进程,提前捕获停机信号
原理:提前注册信号监听,收到停止指令自动平稳退出
适用场景:shell 常驻服务、后台守护进程
- 示例 3(释放连接 / 保存状态)
/bin/sh -c stop_service.sh
适用:复杂停机逻辑(多步骤收尾)
原理:调用容器内自定义停机脚本,可实现保存日志、断开连接、缓存落盘、关闭子进程等全套动作
适用场景:业务流程复杂、需要自定义收尾操作的服务
配置完成后,停止或升级服务,观察在途请求正常完成、无报错即可。