菜鸟科技网

qstat命令如何查看系统进程状态?

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

qstat命令如何查看系统进程状态?-图1
(图片来源网络,侵删)

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 后可能输出如下内容:

qstat命令如何查看系统进程状态?-图2
(图片来源网络,侵删)
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命令如何查看系统进程状态?-图3
(图片来源网络,侵删)
qstat -Q

输出示例如下: | Queue Name | Max Jobs | Total Nodes | Running Jobs | Status | |------------|----------|-------------|--------------|--------| | workq | 50 | 100 | 30 | E | | debugq | 10 | 5 | 2 | E | StatusE 表示队列开启,若为 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 个计算节点。

注意事项

  1. 调度系统兼容性:qstat 的功能和参数可能因调度系统(如 PBS、Torque、SLURM)不同而有所差异,需结合具体环境查阅文档,SLURM 环境下通常使用 squeue 命令,但部分集群会通过 qstat 兼容接口调用。
  2. 权限问题:普通用户只能查看自己提交的作业信息,管理员可通过 -u 参数查看所有用户的作业。
  3. 输出可读性:当作业数量较多时,建议结合管道符和 grepawk 进行筛选,qstat | grep "R" 仅显示运行中的作业。
  4. 历史作业查询:默认情况下,qstat 不显示已完成的作业,需使用 -x 参数,但调度系统可能限制历史数据的保留时间。

相关问答FAQs

问题1:qstat 命令无法显示作业信息,可能的原因有哪些?
解答:可能的原因包括:(1)作业调度服务未正常运行,需检查 pbs_serverslurmctld 服务状态;(2)用户权限不足,普通用户无法查看其他用户的作业;(3)作业 ID 输入错误,或作业已完成并被清理;(4)网络连接问题,导致无法与调度服务器通信,可通过 systemctl status pbs_server(或对应服务)检查服务状态,或使用 qstat -a 查看所有活跃作业排查。

问题2:如何通过 qstat 命令统计当前排队作业的数量?
解答:可通过管道符结合 grepwc 命令实现,qstat | grep "Q" | wc -l,该命令首先过滤出状态为 Q(排队)的作业行,再通过 wc -l 统计行数,即得到排队作业的总数,若需统计特定用户的排队作业,可添加 -u 参数,如 qstat -u username | grep "Q" | wc -l

分享:
扫描分享到社交APP
上一篇
下一篇