Prhub

#27405 Don't write crash dump on graceful exit

原始 PR 作者 cctry 合并时间 2026-06-06 08:06 文件变更 1 提交数 1 评论 2 代码增减 +0 / -1

执行摘要

修复优雅退出时误写 crash dump 的问题

每次优雅关闭都会产生 crash dump 文件,容易误导运维人员认为发生了崩溃,且不必要的磁盘写入影响使用体验。PR 描述指出:"A graceful exit is not a crash",因此跳过 dump 是合理的修复。

本次变更为一次小范围、低风险的 bugfix,逻辑清晰,改动量小。建议快速合并。

讨论亮点

该 PR 没有 review 评论,仅有一条来自 gemini-code-assist[bot] 的自动提示(每日配额已满),无实质性讨论。

实现拆解

  1. 删除崩溃转储调用:在 python/sglang/srt/managers/tokenizer_manager.pysigterm_watchdog 方法中,当请求全部排空(remain_num_req == 0)时,删除对 self.dump_requests_before_crash() 的调用,直接 break 退出循环。
  2. 保持其他逻辑不变:Unhealthy 状态和强制关闭分支(SGL_FORCE_SHUTDOWN)仍然保留原有行为,仅在排空后的清理路径中移除 dump 调用。
文件 模块 状态 重要度
python/sglang/srt/managers/tokenizer_manager.py 请求管理 modified 4.18

关键符号

sigterm_watchdog

关键源码片段

python/sglang/srt/managers/tokenizer_manager.py core-logic

包含核心方法 `sigterm_watchdog`,本次变更的唯一修改文件。

# 位于 TokenizerManager 类中
async def sigterm_watchdog(self):
    """Gracefully drain requests on SIGTERM, then exit."""
    while not self.gracefully_exit:
        await asyncio.sleep(5)
​
    # Drain requests
    while True:
        remain_num_req = len(self.rid_to_state)
        remaining_rids = list(self.rid_to_state.keys())
​
        if self.server_status == ServerStatus.UnHealthy:
            # 健康检查失败时强制退出,保留 crash dump
            logger.error(
                "Signal SIGTERM received while health check failed. Force exiting."
            )
            self.dump_requests_before_crash()
            self.force_exit_handler()
            break
​
        elif get_bool_env_var("SGL_FORCE_SHUTDOWN"):
            # 强制关闭标志,直接退出,不 dump
            logger.error(
                "Signal SIGTERM received while force shutdown flag set. Force exiting."
            )
            self.force_exit_handler()
            break
​
        logger.info(
            f"Gracefully exiting... Remaining number of requests {remain_num_req}. "
            f"Remaining requests {remaining_rids=}."
        )
        if remain_num_req > 0:
            await asyncio.sleep(5)
        else:
            # 所有请求已排空:优雅退出,不应写入 crash dump
            break
​
    kill_process_tree(os.getpid(), include_parent=True)
    sys.exit(0)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。该变更仅在优雅退出的排空路径中移除一行调用,与 crash dump 无关的流程不受影响。Unhealthy 状态和强制关闭分支保留了 crash dump 功能,不会丢失真正的崩溃信息。

用户侧:优雅关闭后不再产生无意义的 crash dump 文件,日志更清晰。运维侧:减少了误导性的报警。系统侧:无性能影响。影响范围仅限于 sigterm_watchdog 方法的一个分支,非常局部。

变更极小,风险低

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论