我可以通过

ps aux 


并通过VSZ和RSS

来查看所有进程和内存的列表。一种方法,以按RSS值的降序对命令的输出进行排序?

评论

预期的输出是多少?检查ps

有关如何使用--sort的其他示例,请参见:alvinalexander.com/linux/…

使用任何工具的超集问题:stackoverflow.com/questions/4802481/…

#1 楼

使用以下命令:

ps aux --sort -rss


在此处检查更多的Linux进程内存使用情况

评论


注意-如果要查看最佳结果,将其像ps aux --sort -rss |一样放入头部很有帮助。头-n15

– Yeehosef
2015年3月26日15:38



我收到错误ps:非法选项--

–米格尔·莫塔(Miguel Mota)
16年5月19日在18:27

@MiguelMota如果这样:ps aux --sort = rss怎么办?

–coffeMug
16年5月19日在18:32



@coffeMug无法正常工作,但这可以使ps aux |排序-rn -k 6

–米格尔·莫塔(Miguel Mota)
16年5月19日在18:41

@coffeMug不知道如何找到版本,但是我在Mac OSX上,所以也许这就是为什么

–米格尔·莫塔(Miguel Mota)
16年5月19日在18:58

#2 楼

一种快速而肮脏的方法是将ps aux的输出通过管道传递给sort命令:

$ 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开关调小一些,这将强制所有输出停留在一行上。然后,您可以使用箭头键向左/向右/向上/向下移动以查看所有内容。

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


在ps中排序

ps的某些版本可以使用--sort。然后,此开关可以使用带有+-前缀的键来表示排序顺序...从最小到最大或从最小到最大。 ,-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


评论


ps会始终按照您希望排序的方式输出列以查看/处理它们吗?

–Felipe Alvarez
15年8月13日在2:34

取决于ps的版本

–slm♦
15年8月13日在4:04

一个... |少是一个好建议,但是有时您的进程有一个巨大的命令行,并且会使输出混乱。在这种情况下... |少-S效果更好。

–浪费
16-11-17在23:54

@waste-好提示,请记住-S会被截断,因此您可能会丢失一些想看的内容,但是如果您只对最左边的列感兴趣,则可以使用其他建议。

–slm♦
16年11月18日在2:54

@slm我不确定少用-S的情况。当关闭较少的视图时,所有内容都会消失,但是只要您处于视图中,就可以垂直滚动也可以水平滚动。但是,复制可能很困难。

–浪费
16年11月18日在3:03

#3 楼

即使ps不能反映所使用的实际内存,此命令也很有用。

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


#4 楼

ps aux --sort -rss很不错:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user     5984  0.8  7.4 1632488 296056 ?      Sl   06:30   6:18 /usr/lib/chromium-browser/chromium-browser --type=ren
user    23934 21.7  6.0 1565600 241228 ?      Sl   15:45  40:10 /opt/atom/atom --type=renderer --enable-experimental-
user     5533  0.9  5.1 3154096 206376 ?      SLl  06:30   6:47 /usr/lib/chromium-browser/chromium-browser --enable-p
user    17306  1.7  4.9 1360648 196124 ?      Sl   18:14   0:36 /usr/lib/chromium-browser/chromium-browser --type=ren
user    22272 30.1  4.6 1347784 185032 ?      Sl   18:43   1:54 /usr/lib/chromium-browser/chromium-browser --type=ren
user    19318  0.6  3.3 1304324 133452 ?      Sl   18:27   0:09 /usr/lib/chromium-browser/chromium-browser --type=ren
user    22098  1.0  3.3 1298500 133216 ?      Sl   18:43   0:04 /usr/lib/chromium-browser/chromium-browser --type=ren


,但是如果您想按应用程序查看内存和cpu的使用情况(按命令分组):

python3.6  sum_process_resources.py 
====   CPU%   ====
0. /opt/atom/atom | 27.8
1. /usr/lib/chromium-browser/chromium-browser | 11.2
2. python3.6 | 11.0
3. /opt/google/chrome/chrome | 1.6
4. /usr/lib/xorg/Xorg | 1.4
5. /opt/Franz/franz | 0.7
====   MEM%   ====
0. /usr/lib/chromium-browser/chromium-browser | 37.2
1. /opt/google/chrome/chrome | 11.3
2. /opt/Franz/franz | 10.6
3. /opt/atom/atom | 10.1
4. /usr/lib/xorg/Xorg | 2.0
5. com.google.android.gms.persistent | 1.4
====   RSS MB   ====
0. /usr/lib/chromium-browser/chromium-browser | 1475.07 MB
1. /opt/google/chrome/chrome | 461.35 MB
2. /opt/Franz/franz | 429.04 MB
3. /opt/atom/atom | 402.18 MB
4. /usr/lib/xorg/Xorg | 78.53 MB
5. com.google.android.gms.persistent | 58.02 MB


代码:

#sum_process_resources.py
from collections import OrderedDict
import subprocess

def run_cmd(cmd_string):
    """Runs commands and saves output to variable"""
    cmd_list = cmd_string.split(" ")
    popen_obj = subprocess.Popen(cmd_list, stdout=subprocess.PIPE)
    output = popen_obj.stdout.read()
    output = output.decode("utf8")
    return output

def sum_process_resources():
    """Sums top X cpu and memory usages grouped by processes"""
    ps_memory, ps_cpu, ps_rss = {}, {}, {}
    top = 6
    output = run_cmd('ps aux').split("\n")
    for i, line in enumerate(output):
        cleaned_list = " ".join(line.split())
        line_list = cleaned_list.split(" ")
        if i > 0 and len(line_list) > 10:
            cpu = float(line_list[2])
            memory = float(line_list[3])
            rss = float(line_list[5])
            command = line_list[10]
            ps_cpu[command] = round(ps_cpu.get(command, 0) + cpu, 2)
            ps_memory[command] = round(ps_memory.get(command, 0) + memory, 2)
            ps_rss[command] = round(ps_rss.get(command, 0) + rss, 2)
    sorted_cpu = OrderedDict(sorted(ps_cpu.items(), key=lambda x: x[1], reverse=True))
    sorted_memory = OrderedDict(sorted(ps_memory.items(), key=lambda x: x[1], reverse=True))
    sorted_rss = OrderedDict(sorted(ps_rss.items(), key=lambda x: x[1], reverse=True))
    print("====   CPU%   ====")
    for i, k in enumerate(sorted_cpu.items()):
        if i < top:
            print("{}. {} | {}".format(i, k[0], k[1]))
    print("====   MEM%   ====")
    for i, k in enumerate(sorted_memory.items()):
        if i < top:
            print("{}. {} | {}".format(i, k[0], k[1]))
    print("====   RSS MB   ====")
    for i, k in enumerate(sorted_rss.items()):
        if i < top:
            print("{}. {} | {} MB".format(i, k[0], round((k[1]/1024), 2)))


if __name__ == '__main__':
    sum_process_resources()


#5 楼

作为其他答案中显示的BSD样式参数的替代方法,可以使用(至少使用Debian和Ubuntu发行的procps):

ps -eF --sort=-rss


#6 楼

简单的方法是安装htop

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

更复杂的

#7 楼


运行top命令

Shift + F根据字段进行排序(请参见下面的完整菜单)
选择n根据内存使用情况进行排序


n:%MEM =内存使用率(RES)


#8 楼

如何按进程名称总计已用内存:

有时即使查看最大的单个进程,仍然有很多未使用的已用内存。要检查使用内存的是否有许多相同的较小进程,可以使用类似以下的命令,该命令使用awk来汇总相同名称的进程使用的总内存:
br />
例如输出

ps -e -orss=,args= |awk '{print  " "  }'| awk '{tot[]+=;count[]++} END {for (i in tot) {print tot[i],i,count[i]}}' | sort -n