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?
--sort
có tại đây: alvinalexander.com/linux/ Kẻ
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?
--sort
có tại đây: alvinalexander.com/linux/ Kẻ
Câu trả lời:
head
như thếps aux --sort -rss | head -n15
ps: illegal option -- -
ps aux --sort=rss
?
ps aux | sort -rn -k 6
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 sort
lệnh:
$ 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
...
Đ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.
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]
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 -S
tắ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
Một số phiên bản ps
cung 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.
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
luôn xuất các cột theo cách bạn muốn sort
thấy / xử lý chúng?
... | less
là 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 -S
hoạt động tốt hơn.
-S
cắ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.
less -S
. Khi bạn đóng less
chế độ 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ù.
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()
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
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
ps