ฉันสามารถดูรายการกระบวนการทั้งหมดและหน่วยความจำผ่าน
ps aux
และผ่าน VSZ และ RSS
มีวิธีเรียงลำดับผลลัพธ์ของคำสั่งนี้ตามลำดับจากมากไปน้อยในค่า RSS หรือไม่
--sort
อยู่ที่นี่: alvinalexander.com/linux/…
ฉันสามารถดูรายการกระบวนการทั้งหมดและหน่วยความจำผ่าน
ps aux
และผ่าน VSZ และ RSS
มีวิธีเรียงลำดับผลลัพธ์ของคำสั่งนี้ตามลำดับจากมากไปน้อยในค่า RSS หรือไม่
--sort
อยู่ที่นี่: alvinalexander.com/linux/…
คำตอบ:
ใช้คำสั่งต่อไปนี้:
ps aux --sort -rss
ตรวจสอบที่นี่สำหรับการใช้งานหน่วยความจำกระบวนการ Linuxเพิ่มเติม
head
เหมือนps aux --sort -rss | head -n15
ps: illegal option -- -
ps aux --sort=rss
?
ps aux | sort -rn -k 6
วิธีการที่รวดเร็วและสกปรกคือเพียงท่อส่งออกของ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
--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
ที่จะเห็นกระบวนการ / พวกเขา?
... | less
เป็นคำแนะนำที่ดี แต่บางครั้งกระบวนการของคุณมีบรรทัดคำสั่งขนาดใหญ่และทำให้เกิดผลลัพธ์ ในกรณีดังกล่าว... | less -S
ทำงานได้ดีขึ้น
-S
ตัดทอนและคุณอาจสูญเสียบางสิ่งที่คุณต้องการดู แต่คำแนะนำที่ดีก็คือถ้าคุณสนใจคอลัมน์ซ้ายสุดเท่านั้น
less -S
ผมไม่แน่ใจว่าเป็นกรณีสำหรับ เมื่อคุณปิดless
มุมมองทุกอย่างจะหายไป แต่ตราบใดที่คุณอยู่ในมุมมองคุณสามารถเลื่อนในแนวตั้ง แต่ก็เป็นแนวนอน แม้ว่าการทำสำเนาอาจทำได้ยาก
แม้ว่า 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 "" }'
ps aux - เรียง -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()
อีกทางเลือกหนึ่งสำหรับข้อโต้แย้งสไตล์ BSD ที่แสดงในคำตอบอื่น ๆ หนึ่งสามารถใช้ (อย่างน้อยใช้ procps จัดส่งโดย Debian และ Ubuntu):
ps -eF --sort=-rss
วิธีง่ายๆคือการติดตั้งhtop
ในการที่คุณสามารถเรียงลำดับกระบวนการตาม PID, Percentage CPU, MEM
มีความซับซ้อนมากขึ้น
top
คำสั่งShift + F
เพื่อจัดเรียงตามฟิลด์ (ดูเมนูเต็มด้านล่าง)n
เพื่อจัดเรียงตามการใช้งานหน่วยความจำn:% MEM = การใช้หน่วยความจำ (RES)
วิธีรวมหน่วยความจำที่ใช้หมดแล้วโดยใช้ชื่อกระบวนการ:
บางครั้งถึงกับมองหากระบวนการเดียวที่ยิ่งใหญ่ที่สุดก็ยังมีหน่วยความจำที่ใช้งานจำนวนมากซึ่งไม่ได้รับการยอมรับ ในการตรวจสอบว่ามีกระบวนการเล็ก ๆ ที่เหมือนกันจำนวนมากโดยใช้หน่วยความจำหรือไม่คุณสามารถใช้คำสั่งต่อไปนี้ซึ่งใช้ 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
ps