liyanqing1987/lsfmonitor/lsf-job-fail
Claude Code and agent skill by liyanqing1987/lsfmonitor
- community
Checking that the SKILL.md file is still in the repository.
诊断LSF/OpenLava/Volclava作业EXIT失败问题,通过退出码和TERM_*终止原因精准定位根因,区分应用错误与系统终止
Install
npx vskill@latest install liyanqing1987/lsfmonitor/lsf-job-failSKILL.md
LSF 作业 EXIT/失败诊断技能
功能说明
专项诊断作业 EXIT(异常退出/运行失败)问题,覆盖:
- 应用程序自身错误(脚本语法、输入文件、依赖库缺失)
- 系统信号终止(OOM、段错误、管理员/调度器 kill)
- 资源超限终止(内存/CPU时间/运行时长/进程数/Swap/磁盘)
- 环境问题(工作目录不可访问、NFS 挂载异常)
- 被抢占或调度器策略终止
触发条件
用户提问涉及以下内容时自动启用:
- 作业 EXIT / 失败了,怎么查原因
- 退出码 137/139/143/255 是什么意思
- 作业被杀了 / 终止了
- TERM_MEMLIMIT / TERM_RUNLIMIT 等
- 怎么看已完成作业的日志 / 历史记录
AI 输出纪律
以下约束是给 AI 的判断与行为规则,不是给用户的科普。除非用户行为触发,否则不要向用户复述这些约束本身;AI 只在需要时把它体现为正确的行动或修复建议。
- 集群约束不主动科普:本集群内存类用
-R "rusage[mem=...]"(MB 单位,不支持G后缀),不推荐-M。仅当用户自己已使用 `-M` 时才提醒"建议去掉-M改用-R rusage[mem=...]";用户没提-M时,AI 内部知道别建议-M即可,不主动解释"-M不推荐"。 - 权限约束按需说明:普通用户无权 ssh 登录执行节点。仅当用户主动要求登执行节点看进程/日志时才说明"无 ssh 权限,改用 LSF 指标或请管理员协助";用户没问节点登录时不提。
- 节点级排查用 `bsub -m` 替代 ssh:需要看执行节点的系统日志/进程时,用
bsub -q <queue> -m <exec_host> -Is "命令"在指定机器跑(机器未 closed、有 queue 权限时);机器 closed/无权限时转 LSF 指标或请管理员。不要建议用户直接 ssh 登录执行节点。 - 修复操作走确认流程:诊断后提出的涉及状态变更的命令(如 bkill/bmod/重新 bsub)属"诊断后修复",按主 system prompt 走"可选操作编号列表 + 用户选号确认"流程,不要直接执行,也不要向用户解释"这是危险命令所以我要你确认"——照流程做即可。
- 基于实际数据下结论:退出码/TERM 的判断必须引用具体数字(如 max_mem=X / MEMLIMIT=Y),不臆测;推测用"可能/疑似"。
诊断流程
执行要求:
- 所有诊断命令必须通过 run_command 工具直接执行并分析结果,不要将命令以文本形式输出给用户。
- 如果用户询问的是新的作业ID或距上次查询已有一段时间,必须重新执行命令获取实时数据。
- 每次诊断必须至少执行 Step 1 的命令,不可跳过。
Step 0:前置环境检查(严格执行,不要跳过或询问用户)
- 确认当前用户身份(从 system prompt 中的 Current user 获取)
- 如果用户没有提供 Job ID,直接运行
bmonitor_cli jobs --user <current_user> --status EXIT --limit 20查看最近的 EXIT 作业(输出 JSON,跨 LSF/OpenLava/Volclava 稳定) - 找到 EXIT 作业后直接进入 Step 1 诊断,不要反问用户确认
Step 1:采集 EXIT 作业信息
优先用 bmonitor_cli(JSON 输出、跨集群稳定),不足时再用裸 LSF 命令补:
必须提取的核心字段:
- Exit Code、Termination Reason(TERM_*)
- 资源使用峰值:MAX MEM、CPU TIME USED
- 资源限制阈值:MEMLIMIT、RUNLIMIT、CPULIMIT
- 工作目录(CWD)、执行命令、stdout/stderr 路径、执行节点
Step 2:根据 Exit Code 分支诊断
2.1 Exit Code 1~127:应用程序错误
stdout/stderr 路径从 Step 1 的 bjobs -l 输出(OUTPUT/ERROR 字段)或 CWD 下 .log/.err/.out 文件获取,不要臆测路径:
| 退出码 | 常见含义 | 排查方向 | |
|---|---|---|---|
| 1 | 通用错误 | 查 stderr | |
| 2 | shell 命令误用 | 检查脚本语法 | |
| 126 | 命令不可执行 | 检查文件权限 | |
| 127 | 命令未找到 | 检查 PATH、模块加载 |
2.2 Exit Code >= 128:系统信号终止
128+N 表示作业被编号为 N 的信号终止。信号本身不携带发送者身份,是谁杀的看 Step 3 的 TERM_*(TERM_OWNER=用户自己 bkill、TERM_ADMIN=管理员 bkill、TERM_MEMLIMIT/TERM_RUNLIMIT=LSF 超限终止)。注意 128 本身无信号含义(程序直接 exit(128));程序主动 exit(N) 时值不会落到 >=128 区间,因此 1~127 均为程序自己退出。
| 退出码 | 信号 | 含义 | 最常见原因 | |
|---|---|---|---|---|
| 130 | SIGINT (2) | Ctrl+C 中断 | 用户手动中断 | |
| 131 | SIGQUIT (3) | 退出+core dump | 程序异常 | |
| 132 | SIGILL (4) | CPU 不支持指令 | 编译目标与机器架构不匹配 | |
| 134 | SIGABRT (6) | 异常终止 | 断言失败 | |
| 135 | SIGBUS (7) | 总线错误 | 读损坏文件、mmap 文件被截断(存储问题) | |
| 136 | SIGFPE (8) | 算术异常 | 除零、浮点溢出 | |
| 137 | SIGKILL (9) | 被强制杀死 | 内存溢出 OOM(TERM_MEMLIMIT/OOM killer/kill -9) | |
| 139 | SIGSEGV (11) | 段错误 | 内存越界、空指针 | |
| 141 | SIGPIPE (13) | 管道破裂 | 读取方已退出仍写 stdout | |
| 143 | SIGTERM (15) | 被请求终止 | bkill 默认方式(TERM_OWNER=用户自己 / TERM_ADMIN=管理员) | |
| 152 | SIGXCPU (24) | CPU 时间超限 | 超过 CPULIMIT | |
| 153 | SIGXFSZ (25) | 文件大小超限 | 输出(fsdb/wave/日志)超出文件大小限制 |
Exit Code 137 深度排查:
- MAX MEM > MEMLIMIT → LSF 杀死
- MAX MEM ≈ 节点物理内存 → 系统 OOM killer
- MAX MEM 远低于 MEMLIMIT → 其他进程竞争内存
Exit Code 255(非信号,单独说明): 不是信号终止(128+signum 体系之外),通常是 LSF 在作业未正常跑起来或 shell 层执行失败时填的码。常见原因:
- 执行节点不可达 / SSH 提交失败 / 节点失联
- 可执行文件缺失、权限问题、PATH/模块未加载(与 127 类似但由 LSF 包装层返回)
- bsub 阶段或环境初始化阶段异常
排查:先确认节点是否可达、可执行路径是否存在;查 bjobs -l 的 SUSPENSION/PENDING REASON 与 bhist 事件。
Step 3:TERM_* 终止原因诊断
| 终止原因 | 根因 | 修复操作 | |
|---|---|---|---|
| TERM_MEMLIMIT | 内存超限 | 增大 -R "rusage[mem=...]"(MB);优化内存占用 | |
| TERM_CPULIMIT | CPU 时间超限 | 增大 -c 限制;优化并行逻辑 | |
| TERM_RUNLIMIT | 运行时长超限 | 增大 -W 限制;换长时间队列 | |
| TERM_SWAP | Swap 超限 | 增大 Swap 限制;排查内存泄漏 | |
| TERM_PROCESSLIMIT | 进程数超限 | 增大 -p 限制 | |
| TERM_THREADLIMIT | 线程数超限 | 增大 -T 限制 | |
| TERM_DISK_LIMIT | 磁盘超限 | 清理大文件;换大分区 | |
| TERM_ADMIN / TERM_FORCE_ADMIN | 管理员终止 | 联系管理员确认原因 | |
| TERM_OWNER / TERM_FORCE_OWNER | 用户自己终止 | 确认是否误操作 | |
| TERM_CWD_NOTEXIST | 工作目录不可访问 | 确认 NFS 挂载;修正路径 | |
| TERM_LOAD | 节点负载超阈值 | 换低负载节点 | |
| TERM_PREEMPT | 被高优先级作业抢占 | 提交到更高优先级队列 | |
| TERM_WINDOW | 队列时间窗口关闭 | 换无限制队列 | |
| TERM_EXTERNAL_SIGNAL | 外部信号 | 查节点系统日志,通常是 OOM killer | |
| TERM_OTHER | LSF 泛化终止原因 | 查 bhist -l 事件细节 | |
| TERM_ZOMBIE | LSF 不可用(mbatchd 异常)时终止 | 联系管理员确认 | |
| TERM_RC | 云平台回收资源连接器主机 | 联系管理员 |
完整的 TERM_* 清单见config/lsf/term_signal.yaml(33 条)。
Step 4:进阶排查
- 查看完整日志:如果 stdout/stderr 路径已知,查看完整内容
- 检查执行环境一致性:
module list、env | grep PATH - 节点系统日志:查 OOM 等,可用
bsub -q <queue> -m <exec_host> -Is "dmesg | grep -i oom | tail -20"在执行节点跑(机器未 closed、有权限时);无权限时联系管理员查看/var/log/messages - 重放测试:
bsub -I <command>交互式提交复现
Step 5:诊断结论输出规范
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingconfig/ai/lsf_job_fail/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/liyanqing1987/lsfmonitor/lsf-job-fail)