按内存使用情况对进程进行排序

按内存使用情况对进程进行排序

我可以通过查看所有进程和内存的列表

ps aux 

并浏览 VSZ 和 RSS

有没有办法按 RSS 值的降序对该命令的输出进行排序?

答案1

使用以下命令:

ps aux --sort -rss

检查这里了解更多Linux进程内存使用情况

答案2

一种快速但肮脏的方法是将输出通过管道传输ps auxsort命令:

$ ps aux | sort -rn -k 5,6

例子

$ ps aux | sort -rn -k 5,6
...
root      1584  0.0  0.0  22540  1236 ?        S    07:04   0:01 hald-addon-storage: polling /dev/sr0 (every 2 sec)
root      1575  0.0  0.0  22536   872 ?        S    07:04   0:00 /usr/libexec/hald-addon-generic-backlight
root      1574  0.0  0.0  22536   880 ?        S    07:04   0:00 /usr/libexec/hald-addon-leds
root      1565  0.0  0.0  22536   876 ?        S    07:04   0:00 /usr/libexec/hald-addon-rfkill-killswitch
saml      2507  0.0  0.0  22232   500 ?        S    07:05   0:00 dbus-launch --sh-syntax --exit-with-session
root      1671  0.0  0.0  22156   936 ?        Ss   07:04   0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
...

这不能处理与输出混合的列标题,但在命令行上很容易记住,并且是在手动查看此类输出时执行所需操作的可接受的方法。

例子

root      1791  0.0  0.0   4140   536 tty2     Ss+  07:04   0:00 /sbin/mingetty /dev/tty2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       996  0.0  0.0      0     0 ?        S    07:04   0:01 [kdmflush]
root       982  0.0  0.0      0     0 ?        S    07:04   0:00 [kvm-irqfd-clean]

更多提示

另一个技巧是将整个输出通过管道传输到另一个命令,例如less.这使您可以一次查看一页信息,还可以使用箭头键和向上/向下翻页键来回滚动输出。

$ ps aux | sort -rn -k 5,6 | less

如果您的输出绕行很多,您还可以使用-S切换到 less,这将强制所有输出保留在一行上。然后,您可以使用箭头键向左/向右/向上/向下移动以查看所有内容。

$ ps aux | sort -rn -k 5,6 | less -S

ps内排序

某些版本ps提供了使用--sort.然后,此开关可以采用以 a+或 a为前缀的键-来表示排序顺序...从最小到最大或从最大到最小。

例子

vsz,-rss

$ ps aux --sort=vsz,-rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    07:03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    07:03   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    07:03   0:01 [migration/0]
root         5  0.0  0.0      0     0 ?        S    07:03   0:00 [watchdog/0]

+vsz,+rss

$ ps aux --sort=+vsz,+rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    07:03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    07:03   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    07:03   0:01 [migration/0]
root         5  0.0  0.0      0     0 ?        S    07:03   0:00 [watchdog/0]

-vsz,-rss

$ ps aux --sort=-vsz,-rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1832  0.0  0.0 2088924 3312 ?        Sl   07:04   0:00 /usr/sbin/console-kit-daemon --no-daemon
saml      3517  0.2  1.2 2073196 100492 ?      Sl   07:06   0:34 /home/saml/.dropbox-dist/dropbox
saml      3516  0.0  0.8 2071032 67388 ?       Sl   07:06   0:07 /home/saml/.dropbox-dist/dropbox
saml      2657  0.1  0.7 1580936 57788 ?       Sl   07:05   0:27 nautilus

答案3

即使 ps 不反映实际使用的内存,该命令也非常有用。

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }'

答案4

简单的方法是安装顶部

您可以根据 PID、CPU 百分比、MEM 对进程进行排序

更复杂

相关内容