Sắp xếp các quá trình theo cách sử dụng bộ nhớ


128

Tôi có thể xem danh sách tất cả các quy trình và bộ nhớ thông qua

ps aux 

và đi qua VSZ và RSS

Có cách nào để sắp xếp đầu ra của lệnh này theo thứ tự giảm dần trên giá trị RSS không?


Sản lượng dự kiến ​​sẽ là gì? kiểm traps
Rahul Patil

Các ví dụ khác về cách sử dụng --sortcó tại đây: alvinalexander.com/linux/ Kẻ
slm

Câu trả lời:


224

Sử dụng lệnh sau:

ps aux --sort -rss

Kiểm tra ở đây để biết thêm quá trình sử dụng bộ nhớ Linux


12
lưu ý - nếu bạn muốn xem kết quả hàng đầu, thật hữu ích khi đưa nó vào headnhư thếps aux --sort -rss | head -n15
Yehosef

3
Tôi gặp lỗi ps: illegal option -- -
Miguel Mota

@MiguelMota Nếu như thế này : ps aux --sort=rss?
coffeMug

2
@coffeMug không hoạt động nhưng điều này đã làmps aux | sort -rn -k 6
Miguel Mota

1
@coffeMug không chắc chắn cách tìm phiên bản nhưng tôi đang dùng Mac OSX nên có lẽ đó là lý do
Miguel Mota

25

Một phương pháp nhanh chóng và dơ bẩn là chỉ cần ống đầu ra của ps auxđể các sortlệnh:

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

Thí dụ

$ 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
...

Điều này không xử lý các tiêu đề cột trộn lẫn với đầu ra, nhưng dễ nhớ trên dòng lệnh và là cách chấp nhận được để làm những gì bạn muốn khi xem thủ công loại đầu ra này.

Thí dụ

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]

Thêm lời khuyên

Một mẹo bổ sung sẽ là chuyển toàn bộ đầu ra sang một lệnh khác, chẳng hạn như less. Điều này cho phép bạn xem thông tin một trang tại một thời điểm và cũng sử dụng các phím mũi tên và phím lên / xuống trang để cuộn qua lại thông qua đầu ra.

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

Nếu đầu ra của bạn được gói rất nhiều, bạn cũng có thể sử dụng công -Stắc để ít hơn, điều này sẽ buộc tất cả đầu ra phải ở trên một dòng thay thế. Sau đó, bạn có thể sử dụng các phím mũi tên của mình để di chuyển sang trái / phải / lên / xuống để xem tất cả.

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

Sắp xếp trong ps

Một số phiên bản pscung cấp khả năng sử dụng --sort. Công tắc này sau đó có thể lấy các khóa có tiền tố a +hoặc a -để biểu thị thứ tự sắp xếp ... từ ít nhất đến lớn nhất hoặc lớn nhất đến ít nhất.

Ví dụ

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

sẽ ps luôn xuất các cột theo cách bạn muốn sortthấy / xử lý chúng?
Felipe Alvarez

Phụ thuộc vào phiên bản nào của ps
slm

2
A ... | lesslà một lời khuyên tốt nhưng đôi khi quy trình của bạn có một dòng lệnh rất lớn và nó làm tắc nghẽn đầu ra. Trong trường hợp như vậy ... | less -Shoạt động tốt hơn.
lãng phí

@waste - mẹo hay, chỉ cần nhớ rằng -Scắt ngắn và do đó bạn có thể mất một số thứ bạn muốn xem, nhưng nếu không thì lời khuyên tốt nếu bạn chỉ quan tâm đến hầu hết các cột.
slm

@slm Tôi không chắc đó là trường hợp cho less -S. Khi bạn đóng lesschế độ xem, mọi thứ sẽ biến mất, nhưng miễn là bạn đang ở trong chế độ xem, bạn có thể cuộn theo chiều dọc nhưng cũng có thể theo chiều ngang. Sao chép có thể khó khăn, mặc dù.
lãng phí

6

Ngay cả khi ps không phản ánh bộ nhớ thực tế được sử dụng, lệnh này khá hữu ích.

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

ps aux --sort -rss là tốt đẹp:

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

nhưng nếu bạn muốn xem bộ nhớ và cách sử dụng cpu theo ứng dụng (được nhóm theo lệnh):

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

mã:

#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

Thay thế cho các đối số kiểu BSD được hiển thị trong các câu trả lời khác, người ta có thể sử dụng (ít nhất là sử dụng Procps, được cung cấp bởi Debian và Ubuntu):

ps -eF --sort=-rss

1

cách đơn giản là cài đặt htop

trong đó bạn có thể sắp xếp quá trình dựa trên PID, CPU phần trăm, MEM

tinh vi hơn


0
  1. Chạy toplệnh
  2. Shift + F để sắp xếp dựa trên trường (xem menu đầy đủ bên dưới)
  3. Chọn nđể sắp xếp dựa trên việc sử dụng bộ nhớ

n:% MEM = Sử dụng bộ nhớ (RES)


0

Cách tổng bộ nhớ đã sử dụng theo tên tiến trình:

Đôi khi, ngay cả khi nhìn vào các tiến trình đơn lớn nhất, vẫn còn rất nhiều bộ nhớ được sử dụng không được tính đến. Để kiểm tra xem có nhiều quá trình nhỏ hơn bằng cách sử dụng bộ nhớ hay không, bạn có thể sử dụng một lệnh như sau sử dụng awk để tổng hợp tổng bộ nhớ được sử dụng bởi các quy trình có cùng tên:

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

ví dụ đầu ra

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.