用ps显示前五个CPU消耗进程


101

如何用ps显示前五个CPU消耗进程?

Answers:


95

ps当您可以通过top命令轻松完成操作时,为什么要使用它?

如果必须使用ps,请尝试以下操作:

ps aux | sort -nrk 3,3 | head -n 5

如果您想要不断更新的真正“顶级”产品,请使用watch

watch "ps aux | sort -nrk 3,3 | head -n 5"

3
ps aux | 排序-k 3,3 | tail -n 5 ;-)
PlanasB,2011年

1
最好包括数字排序,以跳过ps aux的标题。ps aux | sort -nrk 3,3 | head -n 5
syss

1
这产生了许多进程,这些进程更加资源消耗,也更容易出现竞争状况,因为当管道数据到达顶部时,进程列表可能已经更改
phuclv

@LưuVĩnhPhúc是正确的,但我想知道这与top实际工作方式有何不同。
icedwater

1
@icedwater可以top读取过程列表并自行显示结果,而无需通过管道传递给其他过程
phuclv

87

正确答案是

ps --sort=-pcpu | head -n 6

因此,您可以指定列而不干扰排序。

例如:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

对于MAC OS X的注意事项:在Mac OS X中,ps无法识别--sort,但可以-r按当前CPU使用率进行排序。因此,对于Mac OS X,您可以使用:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6

3
这是正确的答案。谢谢Facundo。我试图向其他人解释您可以使用排序和管道传输,但是ps还内置了排序选项,现在我也看到您也使用它,这很棒。
Luis Alvarado

第二个命令似乎更有用...但是第一个命令似乎显示bash(x2或head同样)ps...
Wilf

3
@Wilf第一个用于突出显示如何在不使用命令的情况下按cpu消耗进行排序sort,第二个用于显示如何在不干扰排序的情况下指定列。在解释某事时..最好总是每次简明扼要地解释一件事。
法肯多·维克多

27

根据您的需求,您可能会觉得这更具可读性:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

样本输出:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(字段为%CPU,PID,USER,COMMAND)


22

我不认为这ps是您想要的。你看过输出了top吗?

如果您有GNU-Top,请尝试使用其批处理模式吐出按cpu用法排序的进程列表,并使用head / tail来获得前5行(前8行是标头):

top -b -n 1 | head -n 12  | tail -n 5

BSD顶部的行为似乎有所不同,并且没有非交互模式,因此请使用其他ps基于解决方案的解决方案之一。


1
在OS X中,是top -o cpu -n 5实现同一目标的一种方法。有人知道吗?我top和你不一样top
boehj 2011年

您是拥有不同上衣的人,因此您可以说。我的上衣没有,-o-n设置了退出前刷新显示的次数。
卡莱布

很公平。今天下午,我将在Linux机器上,看看。我的top似乎没有批处理模式,这是非常有限的。必须有某种方式传递top给其他命令。我会做一些研究。
boehj 2011年

我在回答中提到了批处理模式开关,但实际上不需要我这样做,因为它可以自动检测到管道的一部分,而不是交互式会话。您是否尝试过不使用它进行管道输送?
卡莱布

1
会做。GNU top今天下午描述了工作。干杯。
boehj 2011年


5

请注意,根据域代码(在ps手册页中提供),当前版本的ps在其中具有排序功能。处理器使用的域代码为“ c”。您可以--sort c在ps命令的末尾使用,例如ps aux --sort c

这会将使用最高CPU的进程放在列表的底部。通过将减号添加到用于排序的域代码来反转列表的顺序ps aux --sort -c


4

为了给其他有价值的答案加分,我更喜欢:

ps auxk-c | head -6

它还打印标题,这很好。

k与用于排序的CPU使用率(别名)字段相同,--sort并用于c指定反向排序的CPU使用率(别名%cpu)字段-

您可以添加更多的分隔符,,其他可能的符有:%memargsbsdstartpidgiduid...你可以找到完整列表 标准格式说明手册页的部分。例如:

 ps auxk -gid,-%mem | head -11

将打印10个进程的组ID最高,并在内部按内存使用情况进行排序。


3

命令行工具ps有其自己的排序选项,因此我更喜欢:

$ ps -eo pcpu,args --sort=-%cpu | head

您可以添加所需的列。通过ps手册页查看其他可用选项。

$ man ps

0

top在Mac OS X上,其日志记录模式选项的形式为top -l numberOfSamples(似乎等同于GNU的批处理模式top)。但是,至少要有两个样本,因为“显示的第一个样本将为每个进程显示一个无效的%CPU,因为它是使用样本之间的差异计算得出的”(man 1 top)。

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6

0

top将显示正在使用的CPU。如果已安装,则htop可以进行更细粒度的控制,包括使用CPU进行过滤。


0

我认为查看前5个CPU消耗过程的最简单方法是,

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

要查看前5个内存消耗过程

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

哪里,

-e :此标志用于选择所有进程

-o :此标志用于格式化为用户定义的格式。

pid :此参数用于显示pid

comm:此参数仅用于显示命令名称。要获取完整的命令,请使用argscmdcommand

%cpu:此参数以“ ##。#”格式显示进程的cpu利用率百分比。pcpu也可以在这里使用。

%mem:此参数显示进程的驻留集大小与计算机上物理内存的比率,以百分比表示。pmem也可以在这里使用。

--sort:指定排序顺序。在=使用-符号对顶部的最高值进行排序之后,默认选项+是列出递增的数字顺序(即0到n)。


-2

top -bn1 |sed -n '7,12'p也可以作为一个很好的小班轮。
虽然我更喜欢将ps与--sort = X -o X,Y,Z一起使用

使用ps,您可以为进程OR用户提取不同的统计信息grep,然后使用管道将其总计avk或avk。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.