메모리 사용량별로 프로세스 정렬


128

모든 프로세스 및 메모리 목록을 통해 볼 수 있습니다.

ps aux 

VSZ와 RSS를 통해

RSS 값에서 내림차순으로이 명령의 출력을 정렬하는 방법이 있습니까?


예상되는 결과는 무엇입니까? checkps
Rahul Patil

사용 방법의 추가 예는 다음 --sort과 같습니다. alvinalexander.com/linux/…
slm

답변:


224

다음 명령을 사용하십시오.

ps aux --sort -rss

더 많은 Linux 프로세스 메모리 사용량은 여기를 확인하십시오


12
참고-상위 결과를 보려면 다음 head과 같이 입력 하면 도움이됩니다.ps aux --sort -rss | head -n15
Yehosef

3
오류가 발생했습니다 ps: illegal option -- -
Miguel Mota

@MiguelMota 다음과 같은 경우 : ps aux --sort=rss?
coffeMug

2
@coffeMug는 작동하지 않았지만 이것은 작동했습니다ps aux | sort -rn -k 6
Miguel Mota

1
@coffeMug는 버전을 찾는 방법을 잘 모르지만 Mac OSX에 있습니다. 아마도 그 이유입니다
Miguel Mota

24

신속하고 더러운 방법은 파이프의 출력 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. 그런 다음이 스위치는 접두사 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

것입니다 ps 항상 예상대로 출력 열 sort보고 / 공정 그들?
Felipe Alvarez

ps의 어떤 버전에 따라 다름
slm

2
A ... | less는 좋은 조언이지만 때로는 프로세스에 큰 명령 줄이 있고 출력이 복잡합니다. 이러한 경우 ... | less -S더 잘 작동합니다.
폐기물

@waste-좋은 팁, -S잘린 것을 기억 하면보고 싶은 것의 일부를 잃을 수도 있지만 가장 왼쪽 열에 만 관심이 있다면 좋은 조언입니다.
slm

@slm 나는 그것이 확실하지 않다 less -S. less뷰 를 닫으면 모든 것이 사라지지만 뷰에있는 한 세로 또는 가로로 스크롤 할 수 있습니다. 그러나 복사가 어려울 수 있습니다.
폐기물

6

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 "" }'

3

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()

1

다른 답변에 표시된 BSD 스타일 인수의 대안으로 다음을 사용할 수 있습니다 (적어도 Debian 및 Ubuntu에서 제공하는 procps 사용).

ps -eF --sort=-rss

1

간단한 방법은 htop 을 설치하는 것입니다

PID, Percentage CPU, MEM을 기준으로 프로세스를 정렬 할 수 있다는 점에서

더 정교


0
  1. top명령을 실행
  2. Shift + F 필드를 기준으로 정렬 (아래의 전체 메뉴 참조)
  3. n메모리 사용량을 기준으로 정렬하려면 선택

n : % MEM = 메모리 사용량 (RES)


0

프로세스 이름별로 사용한 메모리를 합계하는 방법 :

때로는 가장 큰 단일 프로세스를 보더라도 아직 사용되지 않은 메모리가 많이 있습니다. 메모리를 사용하여 동일한 작은 프로세스가 많이 있는지 확인하려면 다음과 같은 명령을 사용하여 awk를 사용하여 동일한 이름의 프로세스가 사용하는 총 메모리를 요약 할 수 있습니다.

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

예 : 출력

9344 docker 1
9948 nginx: 4
22500 /usr/sbin/NetworkManager 1
24704 sleep 69
26436 /usr/sbin/sshd 15
34828 -bash 19
39268 sshd: 10
58384 /bin/su 28
59876 /bin/ksh 29
73408 /usr/bin/python 2
78176 /usr/bin/dockerd 1
134396 /bin/sh 84
5407132 bin/naughty_small_proc 1432
28061916 /usr/local/jdk/bin/java 7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.