<< All versions
Skill v1.0.0
currentAutomated scan100/100liyanqing1987/lsfmonitor/lsf-job-pend
──Details
PublishedOctober 28, 2026 at 02:37 AM
Content Hashsha256:a908cc215b6b15ed...
Git SHA1f1ff2f5b987
──Files
Files (1 file, 8.8 KB)
SKILL.md8.8 KBactive
SKILL.md · 217 lines · 8.8 KB
name: lsf_job_pend description: 诊断LSF/OpenLava/Volclava作业PEND排队问题,定位调度器为何不分配资源,给出可执行的修复方案 version: 1.0.0 tags:
- pending
- pend
- 排队
- 不跑
- 不启动
- 等待
- waiting
- 挂起
- 调度
LSF 作业 PEND 诊断技能
功能说明
专项诊断作业 PEND(排队未启动)问题,覆盖:
- 队列/用户/节点槽位已满
- 资源请求无匹配节点
- License 不足
- 用户作业数/资源上限已达
- 队列已关闭/停用
- 依赖条件未满足
- 目标主机组无可用节点
- 公平共享调度(Fairshare)被降权
- 预约资源(Reservation)被抢占
触发条件
用户提问涉及以下内容时自动启用:
- 作业为什么 PEND / 一直不跑 / 排队不动
- 作业提交后没启动
- 等了很久还在排队
- 为什么调度器不给我分配资源
AI 输出纪律
以下约束是给 AI 的判断与行为规则,不是给用户的科普。除非用户行为触发,否则不要向用户复述这些约束本身;AI 只在需要时把它体现为正确的行动或修复建议。
- 集群约束不主动科普:本集群内存类用
-R "rusage[mem=...]"(MB 单位,不支持G后缀),不推荐-M。仅当用户自己已使用 `-M` 时才提醒"建议去掉-M改用-R rusage[mem=...]";用户没提-M时不主动解释。 - 权限约束按需说明:普通用户无 ssh 登录执行节点权限,但可用
bsub -q <queue> -m <exec_host> -Is "命令"在指定机器上跑命令(机器未 closed、有 queue 权限时)。仅当用户需要看节点级信息时才给此方案;机器 closed/无权限时转 LSF 指标或请管理员。 - 修复操作走确认流程:诊断后提出的涉及状态变更的命令(如 bkill/bmod/bresume/重新 bsub)按主 system prompt 走"可选操作编号列表 + 用户选号确认"流程,不直接执行,也不向用户解释"这是危险命令所以我要你确认"。
- 基于实际数据下结论:排队根因必须引用具体数字(如 NJOBS=100/MAX=100、pending reason 原文),不臆测;推测用"可能/疑似"。
诊断流程
执行要求:
- 所有诊断命令必须通过 run_command 工具直接执行并分析结果,不要将命令以文本形式输出给用户。
- 如果用户询问的是新的作业ID或距上次查询已有一段时间,必须重新执行命令获取实时数据。
- 每次诊断必须至少执行 Step 1 的命令,不可跳过。
Step 0:前置环境检查(严格执行,不要跳过或询问用户)
- 确认当前用户身份(从 system prompt 中的 Current user 获取)
- 如果用户没有提供 Job ID,直接运行
bmonitor_cli jobs --user <current_user> --status PEND --limit 20列出所有 PEND 作业(输出 JSON,跨 LSF/OpenLava/Volclava 稳定) - 如果只有 1 个 PEND 作业,直接进入 Step 1 诊断
- 如果有多个 PEND 作业,逐一对每个作业执行 Step 1 诊断,一次性给出所有结果
Step 1:采集 PEND 作业信息
优先用 bmonitor_cli(JSON 输出、跨集群稳定),不足时再用裸 LSF 命令补:
bash
bmonitor_cli job <job_id> --diagnose pend # 首选:聚合 pending reason + 队列 slot + 资源匹配判断bjobs -l <job_id> # 补充:全量作业信息——资源请求、提交参数、依赖条件细节bjobs -p <job_id> # 补充:Pending 原因详情(bmonitor_cli 缺该字段时用)
必须提取的核心字段:
- Job ID、提交用户、队列名称、提交节点
- 资源请求:
-R资源表达式、-nCPU 数、-q指定队列、-M内存限制(如有) - Pending Reason(原文,不要翻译或猜测)
- 提交时间(判断已排队多久)
- 依赖条件(如有
-w参数)
Step 2:根据 Pending Reason 深入排查
优先用 bmonitor_cli 的等价命令(JSON 输出、可过滤),不足时再用裸 LSF 命令补。按实际 Pending Reason 执行对应检查:
2.1 槽位不足类
当 Pending Reason 包含 "Not enough job slot" 或 "job limit":
bash
bmonitor_cli queue <queue_name> # 首选:真实调度约束(MAX/JL_U/JL_P/RUNLIMIT/SHARES)+ 成员主机bmonitor_cli users --sort PEND # 首选:用户级作业计数,定位谁在占 slotbmonitor_cli hosts --queue <queue_name> --sort-load # 首选:成员主机状态/slot/负载# 不足时补充:bqueues -l <queue_name> # bmonitor_cli 缺字段时补:NJOBS/MAX/PEND 数量busers -u <user> # 补:用户级别作业数限制(MAX 字段)
诊断逻辑:
- 比较队列当前 NJOBS vs MAX,如果 NJOBS >= MAX,队列满
- 比较用户 NJOBS vs MAX_JOBS,如果达到上限,用户被限流
- 如果所有节点 NJOBS >= MAX,集群无空闲槽位
2.2 资源不匹配类
当 Pending Reason 包含 "Job requirements not satisfied" 或 "not enough":
bash
bmonitor_cli hosts --queue <queue_name> --status unavail --sort-load # 首选:成员主机状态/slot/负载# 不足时补充:lshosts # 补:节点硬件配置(maxmem, ncpus, type, model)lsload -w # 补:节点实时负载和可用资源bhosts -w # 补:节点状态和可用槽位
诊断逻辑:
- 解析
-R资源表达式,确认请求的资源是否合理 - 比较请求资源与集群实际资源(如请求 mem>128G 但最大节点只有 64G)
- 检查是否有节点处于 closed/unavail 状态
- 检查
-m指定的主机/主机组是否有可用节点
2.3 License 不足类
当 Pending Reason 包含 "license" 或 "Not enough":
bash
# 首选 bmonitor_cli(经 run_command 调用,输出 JSON):bmonitor_cli license --feature <feature> # 实时 license:issued/in_use/available + 占用者# 或使用 query_license_info 工具查询 license 使用情况
诊断逻辑:
- 查看指定 License feature 的 Total/In-use/Free 数量
- 确认是被哪些用户/主机占用
2.4 队列/主机状态异常类
当 Pending Reason 包含 "Queue" 或 "Host":
bash
bmonitor_cli queues # 首选:所有队列状态总览(Open/Active)bmonitor_cli queue <queue_name> # 首选:目标队列详细配置 + 成员主机bmonitor_cli hosts --queue <queue_name> # 首选:成员主机状态# 不足时补充:bqueues -l <queue_name> # bmonitor_cli 缺字段时补
诊断逻辑:
- 确认队列是否 Open 且 Active
- 确认队列的 HOSTS 列表中是否有可用节点
- 确认队列的时间窗口(RUN_WINDOW)当前是否开放
2.5 依赖条件类
当 Pending Reason 包含 "Dependency" 或 "condition":
bash
bjobs -l <job_id> # 查依赖条件定义bmonitor_cli job <dep_job_id> # 查依赖作业当前状态(bjobs 看不到已完成作业时用 db job)bjobs <dep_job_id> # 补:依赖作业当前状态(作业仍在 bjobs 中时)
诊断逻辑:
- 解析
-w依赖表达式 - 确认被依赖的作业是否已完成/失败
- 如果依赖作业已 EXIT,条件可能永远无法满足
2.6 用户限制类
当 Pending Reason 包含 "User" 或 "limit reached":
bash
bmonitor_cli users --sort PEND # 首选:用户当前作业计数(MAX/NJOBS/PEND/RUN)blimits -u <user> # 补:用户资源使用限制(部分集群无此命令,失败则跳过,用 busers -u 的 MAX 字段判断)busers -u <user> # 补:用户作业数限制(blimits 不可用时)bjobs -u <user> -r # 查用户当前正在运行的作业
诊断逻辑:
- 确认用户是否达到 MAX_JOBS 限制
- 列出用户当前运行的作业,建议哪些可以结束
Step 3:进阶排查
如果 Step 2 无法确定原因:
- Fairshare 排序:
bmonitor_cli queue <queue>或bqueues -l <queue>查 FAIRSHARE 配置,用户可能因历史使用量被降低优先级 - 资源预约冲突:
brsvs查是否有资源被预约 - 调度周期:如果刚提交不久(< 1 分钟),可能只是调度器还未轮到,等待一个调度周期
- 作业被挂起:查
bjobs -l的 STATUS 字段,确认作业是否处于 SUSP/PSUSP/USUSP/SSUSP 状态(被 bstop 或管理员挂起,非真正 PEND 排队)
Step 4:诊断结论输出规范
### PEND 诊断报告- 作业ID:<job_id>- 提交用户:<user>- 所属队列:<queue_name>- 排队时长:<duration>- Pending 原因:<原文>#### 一、根因分析<基于命令输出的精准根因,引用具体数字(如 NJOBS=100/MAX=100)>#### 二、立即修复操作<可直接复制执行的命令和步骤>#### 三、长期预防建议<可落地的规避方案>