Prhub

#22103 Fix killall_sglang missing the main sglang serve process

原始 PR 作者 hnyls2002 合并时间 2026-04-04 18:43 文件变更 1 提交数 1 评论 2 代码增减 +1 / -1

执行摘要

修复 CI 清理脚本无法杀死主服务器进程的问题,确保端口释放。

根据PR body描述,killall_sglang脚本使用正则模式匹配/proc/PID/cmdline来查找并杀死SGLang进程。然而,主服务器进程(通过sglang serve启动)的命令行格式为/usr/local/bin/python3 /usr/local/bin/sglang serve --model-path ...,而现有模式仅覆盖子进程(如sglang::*sglang.launch_server等),导致主进程被遗漏,从而无法释放其占用的HTTP端口。

该PR变更简单直接,适合快速了解CI清理机制。值得关注review中提到的脚本一致性和CLI子命令覆盖问题,可作为后续改进参考。

讨论亮点

reviewer gemini-code-assist[bot]指出:1. 修改使Python脚本与shell脚本scripts/killall_sglang.sh不一致,建议同步更新以确保本地清理工作正常;2. 当前正则可能遗漏其他CLI子命令如sglang bench(带空格形式),而现有模式sglang.bench仅匹配python -m调用方式。

实现拆解

修改python/sglang/cli/killall.py文件中的正则表达式_SGLANG_PROCESS_PATTERNS,在原有模式基础上添加|sglang serve,使脚本能匹配主服务器进程的命令行。

文件 模块 状态 重要度
python/sglang/cli/killall.py cli modified 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

_SGLANG_PROCESS_PATTERNS

评论区精华

正则表达式一致性与完整性 正确性

reviewer 指出 Python 脚本与 shell 脚本不一致,且可能遗漏其他 CLI 子命令。

结论:未在本次 PR 中解决,建议后续更新。 · 待处理

风险与影响

风险较低:1. 修改仅增加一个正则模式,不会影响现有匹配逻辑;2. 若未同步更新shell脚本,可能导致本地环境清理不彻底,但CI环境可能不受影响;3. 遗漏其他CLI子命令可能导致类似问题,但本次修复聚焦主服务器进程。

对CI流程:确保测试后主服务器进程被杀死,避免端口占用导致后续测试失败。对开发者:本地运行脚本时若未更新shell脚本,可能残留进程。影响范围限于进程清理功能,不涉及核心推理或服务逻辑。

脚本不一致风险 子命令覆盖不全

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本次PR修复了CI清理脚本killall_sglang无法匹配主服务器进程sglang serve的问题,通过修改正则表达式确保进程被正确杀死,避免端口占用残留。变更简单但关键,提升了CI稳定性。

功能与动机

killall_sglang脚本用于在CI测试后清理SGLang进程,但原有正则模式仅匹配子进程(如sglang::*),而主进程命令行格式为/usr/local/bin/python3 /usr/local/bin/sglang serve ...,导致主进程遗漏。这会造成HTTP端口占用,影响后续测试运行。PR body明确指出:“The root process (which owns the uvicorn HTTP server and the listening port) is the only one missed.”

实现拆解

仅修改一个文件:python/sglang/cli/killall.py

关键变更:将正则表达式从

r"sglang::|sglang\\.launch_server|sglang\\.bench|sglang\\.data_parallel|sglang\\.srt|sgl_diffusion::"

更新为

r"sglang::|sglang\\.launch_server|sglang\\.bench|sglang\\.data_parallel|sglang\\.srt|sgl_diffusion::|sglang serve"

添加|sglang serve以匹配主进程。

评论区精华

reviewer gemini-code-assist[bot]提出两点重要反馈:

“Please update the shell script as well to ensure local cleanup works as expected.”
“consider if other CLI subcommands like sglang bench should be included; the current regex matches sglang.bench (with a dot) for python -m, but misses the CLI wrapper sglang bench (with a space).”

这揭示了脚本间不一致和子命令覆盖不全的潜在问题,但本次PR未采纳这些建议。

风险与影响

  • 风险:若未同步更新shell脚本scripts/killall_sglang.sh,本地环境可能清理不彻底;正则仍可能遗漏其他CLI子命令(如sglang bench带空格形式)。
  • 影响:CI测试后端口释放更可靠,减少因进程残留导致的失败;对核心服务无影响。

关联脉络

从近期历史PR看,多个PR涉及CI稳定性修复(如#22083修复死锁、#21735修复内存泄漏),本次PR是这一趋势的延续,聚焦于进程清理环节。与#15562(添加使用统计)等PR无直接关联,但共同维护了测试环境的健壮性。

参与讨论