如何对 ps 输出进​​行排序以查找进程实时优先级并识别进程当前占用的运行队列

use*_*815 6 cpu process ps real-time priority

如何正确识别当前占用CPU队列的实时进程并使用ps统计它们?我知道有一堆像 prio、rtprio、pri、nice 这样的文件,但不知道正确使用。似乎我需要使用类似的东西ps -eo rtprio,prio,cpu,cmd --sort=+rtprio来获取完整列表,但对我来说似乎不正确,因为很多进程-在 RTPRIO 列中都带有符号。例如,我有一个运行 Oracle Linux 的 48 核系统,并尝试确定以下问题:

  1. 哪些进程占用了运行队列?它们的数量是多少?
  2. 如何识别以实时模式运行或具有更高优先级的进程?

use*_*828 6

非零 CPU % 进程列表:

ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm --sort=+pcpu | awk '$8!=0.0 {print}' | awk 'NR>1'
Run Code Online (Sandbox Code Playgroud)

去数他们

ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm --sort=+pcpu | awk '$8!=0.0 {print}' | awk 'NR>1' | wc -l
Run Code Online (Sandbox Code Playgroud)

要看到这个不断更新,但它们在一个名为processes.sh

#!/bin/bash
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm --sort=+pcpu | awk '$8!=0.0 {print}' | awk 'NR>1'
Run Code Online (Sandbox Code Playgroud)

并使用chmod +x processes.sh. 现在使用 watch 运行它以进行实时更新:

watch ./processes.sh
Run Code Online (Sandbox Code Playgroud)