qstat 命令是 Linux 和 Unix 系统中用于查看和管理集群作业状态的核心工具,尤其在高性能计算(HPC)环境中被广泛使用,它通过查询作业调度系统(如 PBS、Torque、SLURM 等)的数据库,实时显示作业的排队、运行、完成等状态信息,帮助用户高效管理计算任务,以下从功能、语法、常用参数、实际应用场景及注意事项等方面详细介绍 qstat 命令。

qstat 命令的基本功能与作用
qstat 命令的主要功能是提供作业调度系统的实时状态快照,用户可通过它快速了解作业的运行情况,包括作业 ID、名称、用户、运行时间、优先级、节点分配等关键信息,对于集群管理员而言,qstat 还可用于监控系统资源使用情况、排查作业调度异常;对于普通用户,它是跟踪作业进度、预估完成时间的重要工具,通过与 grep、awk 等命令结合,qstat 能实现更复杂的状态筛选和数据处理,例如统计特定用户的作业数量或分析作业等待时长。
qstat 命令的基本语法与参数
qstat 命令的基本语法结构为 qstat [选项] [作业 ID],其中选项用于控制输出格式和内容,作业 ID 为可选参数,若指定则显示特定作业的详细信息,否则默认显示当前用户的所有作业,以下是常用参数的分类说明:
基础信息查询参数
-f:以详细格式显示作业信息,包括作业脚本内容、资源请求、依赖关系等,适用于深度排查问题。-u:指定用户名,格式为qstat -u username,可查看特定用户的作业列表,如qstat -u user1。-Q:显示队列状态,包括队列名称、状态(如开启/关闭)、最大作业数、当前运行作业数等,帮助用户了解集群资源分配策略。-B:显示集群概览信息,如总节点数、空闲节点数、运行中的作业数、排队作业数等,适用于宏观监控。
输出格式控制参数
-n:显示作业分配的节点信息,包括节点名和 CPU 核心数,格式为qstat -n job_id。-s:指定作业状态显示,如r(运行中)、qw(排队中)、h(挂起),qstat -s r仅显示运行中的作业。-t:以树状结构显示作业及其子任务的关系,适用于依赖型作业的管理。-j:显示作业的详细资源使用情况,如已用内存、CPU 时间等,需调度系统支持资源监控功能。
其他实用参数
-x:显示已完成的作业信息(默认仅显示活跃作业),历史作业的保留时间取决于调度系统配置。-i:显示作业的输入/输出重定向信息,如标准输出、错误输出文件的路径。-R:显示作业的资源请求限制,如内存上限、运行时间限制等。
qstat 命令的输出解析
qstat 的默认输出以简洁的表格形式呈现,各列含义如下(以 Torque/PBS 为例):
| 列名 | 说明 |
|------------|----------------------------------------------------------------------|
| Job ID | 作业的唯一标识符,格式为 集群名.作业号 |
| Name | 作业名称(用户提交时指定的名称) |
| User | 提交作业的用户名 |
| Time Use | 作业已运行的时间 |
| Status | 作业状态,如 R(运行)、Q(排队)、H(挂起)、C(完成) |
| Queue | 作业所在的队列名称 |
执行 qstat 后可能输出如下内容:

Job ID Name User Time Use S Queue
----------------------- ---------------- --------------- ---------- - -----
cluster.12345 test_job user1 0:30:15 R workq
cluster.12346 data_analysis user2 0:00:00 Q debugq
S 列的状态代码 R 表示作业正在运行,Q 表示作业在排队等待资源,若使用 -f 参数,输出会包含更多字段,如 Resource_List(资源请求)、Job_Owner(作业所有者)等,适合需要详细信息的场景。
实际应用场景示例
查看当前用户的作业状态
用户可通过 qstat 快速查看自己提交的所有作业,
qstat
输出结果将显示作业 ID、名称、运行时间和状态,帮助用户判断哪些作业正在运行、哪些仍在排队。
监控特定队列的资源使用
集群管理员可通过 -Q 参数查看队列状态,

qstat -Q
输出示例如下:
| Queue Name | Max Jobs | Total Nodes | Running Jobs | Status |
|------------|----------|-------------|--------------|--------|
| workq | 50 | 100 | 30 | E |
| debugq | 10 | 5 | 2 | E |
Status 为 E 表示队列开启,若为 D 则表示队列禁用。
分析作业资源分配
用户可通过 qstat -n job_id 查看作业分配的具体节点,
qstat -n 12345
输出可能显示:
Job Id: 12345.cluster
Job_Name = test_job
Job_Owner = user1@node1
resources_used.cput = 0:30:15
resources_used.mem = 2gb
resources_used.vmem = 4gb
job_state = R
Queue = workq
NodeList = [node01,node02,node03]
此处 NodeList 显示作业被分配到 3 个计算节点。
注意事项
- 调度系统兼容性:qstat 的功能和参数可能因调度系统(如 PBS、Torque、SLURM)不同而有所差异,需结合具体环境查阅文档,SLURM 环境下通常使用
squeue命令,但部分集群会通过qstat兼容接口调用。 - 权限问题:普通用户只能查看自己提交的作业信息,管理员可通过
-u参数查看所有用户的作业。 - 输出可读性:当作业数量较多时,建议结合管道符和
grep、awk进行筛选,qstat | grep "R"仅显示运行中的作业。 - 历史作业查询:默认情况下,qstat 不显示已完成的作业,需使用
-x参数,但调度系统可能限制历史数据的保留时间。
相关问答FAQs
问题1:qstat 命令无法显示作业信息,可能的原因有哪些?
解答:可能的原因包括:(1)作业调度服务未正常运行,需检查 pbs_server 或 slurmctld 服务状态;(2)用户权限不足,普通用户无法查看其他用户的作业;(3)作业 ID 输入错误,或作业已完成并被清理;(4)网络连接问题,导致无法与调度服务器通信,可通过 systemctl status pbs_server(或对应服务)检查服务状态,或使用 qstat -a 查看所有活跃作业排查。
问题2:如何通过 qstat 命令统计当前排队作业的数量?
解答:可通过管道符结合 grep 和 wc 命令实现,qstat | grep "Q" | wc -l,该命令首先过滤出状态为 Q(排队)的作业行,再通过 wc -l 统计行数,即得到排队作业的总数,若需统计特定用户的排队作业,可添加 -u 参数,如 qstat -u username | grep "Q" | wc -l。
