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

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

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

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

答案1

非零 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'

来数一下他们

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

要看到这个不断更新,但它们在一个名为的文件中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'

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

watch ./processes.sh

相关内容