Prhub

#38641 [UX] Log worker exit code when process dies unexpectedly

原始 PR 作者 NickCao 合并时间 2026-07-07 20:36 文件变更 1 提交数 3 评论 2 代码增减 +5 / -2

执行摘要

日志增加 worker 进程退出码

当 worker 进程意外退出时,仅记录进程名无法区分失败类型(如 OOM 被 SIGKILL、段错误 SIGSEGV 或 Python 异常退出码 1),增加退出码可让用户和开发者直接从日志判断故障类别。

可快速合入,提升调试体验。

讨论亮点

无 review 讨论。

实现拆解

修改 vllm/v1/executor/multiproc_executor.pymonitor_workers 函数:

  1. next(h.proc.name ...) 改为获取完整进程对象 proc = next(h.proc ...)
  2. 在日志消息中添加 exit code 占位符 "(exit code: %s)",并传入 proc.nameproc.exitcode
文件 模块 状态 重要度
vllm/v1/executor/multiproc_executor.py 执行器 modified 5.67

关键符号

monitor_workers

关键源码片段

vllm/v1/executor/multiproc_executor.py core-logic

单文件修改,在 worker 监控日志中增加进程退出码输出。

# vllm/v1/executor/multiproc_executor.py
# 修改前:仅记录进程名
# 修改后:记录进程名和退出码,便于区分 OOM、段错误等def monitor_workers():
    sentinels = [h.proc.sentinel for h in workers]
    died = multiprocessing.connection.wait(sentinels)
    _self = self_ref()
    if not _self or getattr(_self, "shutting_down", False):
        logger.debug("MultiprocWorkerMonitor: shutdown already initiated")
        return
    _self.is_failed = True
    # 获取进程对象本身而非仅进程名
    proc = next(h.proc for h in workers if h.proc.sentinel == died[0])
    logger.error(
        "Worker proc %s died unexpectedly (exit code: %s), "
        "shutting down executor.",
        proc.name,
        proc.exitcode, # 新增:输出退出码
    )
    _self.shutdown()
    callback = _self.failure_callback
    if callback is not None:
        _self.failure_callback = None
        callback()

评论区精华

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

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

风险与影响

风险极低:纯日志格式变更,不改变控制流或异常处理逻辑,不会引发回归。

影响范围极小,仅改进 MultiprocWorkerMonitor 的错误日志可读性,对功能无影响。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论