แสดงกระบวนการใช้งาน CPU ห้าอันดับแรกด้วย `ps`


101

วิธีแสดงกระบวนการสิ้นเปลือง CPU ห้าอันดับแรกด้วย ps

คำตอบ:


95

ทำไมต้องใช้psเมื่อคุณสามารถทำได้อย่างง่ายดายด้วยtopคำสั่ง?

หากคุณต้องใช้psลองสิ่งนี้:

ps aux | sort -nrk 3,3 | head -n 5

หากคุณต้องการบางสิ่งที่ 'ยอด' อย่างแท้จริงด้วยการอัพเดทอย่างต่อเนื่องให้ใช้การเฝ้าดู

watch "ps aux | sort -nrk 3,3 | head -n 5"

3
ps aux | sort -k 3,3 | tail -n 5 ;-)
PlanasB

1
มันจะเป็นการดีถ้ารวมการเรียงลำดับตัวเลขเพื่อข้ามส่วนหัวของ ps aux ps aux | sort -nrk 3,3 | head -n 5
syss

1
สิ่งนี้วางไข่กระบวนการจำนวนมากซึ่งใช้ทรัพยากรมากขึ้นและมีแนวโน้มที่จะ
แย่งชิงกัน

นี่เป็นความจริง @ LưuVĩnhPhúc แต่ฉันสงสัยว่าสิ่งนี้แตกต่างจากวิธีการtopใช้งานจริง
icedwater

1
@icedwater topอ่านรายการกระบวนการและแสดงผลลัพธ์ด้วยตัวเองโดยไม่ต้องไปป์
ไลน์กับ

87

คำตอบที่ถูกต้องคือ :

ps --sort=-pcpu | head -n 6

ดังนั้นคุณสามารถระบุคอลัมน์โดยไม่รบกวนการเรียงลำดับ

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

หมายเหตุสำหรับ MAC OS X : ใน Mac OS X psไม่รู้จัก--sortแต่มีข้อเสนอ-rให้เรียงตามการใช้งาน CPU ปัจจุบัน ดังนั้นสำหรับ Mac OS X คุณสามารถใช้:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6

3
นี่คือคำตอบที่ถูกต้อง ขอบคุณ Facundo ฉันพยายามอธิบายให้คนอื่นฟังว่าคุณสามารถใช้ sort และ pipe ได้ แต่ ps ก็สร้างขึ้นมาพร้อมกับตัวเลือกสำหรับการเรียงลำดับและตอนนี้ฉันเห็นว่าคุณใช้มันซึ่งยอดเยี่ยมด้วย
Luis Alvarado

คำสั่งที่ 2 นั้นมีประโยชน์มากกว่า ... แต่คำสั่งแรกที่ดูเหมือนจะแสดงbash(x2 หรือheadเช่นกัน) ps...
วิลฟ์

3
@Wilf อันแรกคือการเน้นวิธีเรียงลำดับตามปริมาณการใช้ cpu โดยไม่ใช้คำสั่งsortส่วนที่สองแสดงวิธีระบุคอลัมน์โดยไม่รบกวนการเรียงลำดับ เมื่ออธิบายบางสิ่งบางอย่าง .. จะดีกว่าเสมอที่จะรัดกุมและอธิบายสิ่งหนึ่งครั้ง
Facundo Victor

27

ขึ้นอยู่กับความต้องการของคุณคุณอาจพบว่าสามารถอ่านได้มากกว่านี้เล็กน้อย:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

ตัวอย่างผลลัพธ์:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(ฟิลด์คือ% CPU, PID, USER, COMMAND)


22

ฉันไม่คิดว่าpsเป็นสิ่งที่คุณกำลังมองหา คุณดูผลลัพธ์จากtopหรือยัง

หากคุณมี GNU-Top ลองใช้โหมดแบทช์เพื่อแยกรายการกระบวนการที่เรียงตามการใช้ cpu และใช้ head / tail เพื่อให้ได้ 5 บรรทัดแรก (8 อันดับแรกคือส่วนหัว):

top -b -n 1 | head -n 12  | tail -n 5

BSD ด้านบนดูเหมือนว่าจะทำงานแตกต่างกันและไม่มีโหมดที่ไม่โต้ตอบดังนั้นให้ใช้หนึ่งในpsโซลูชั่นที่ใช้อื่น ๆ


1
ใน OS X เป็นtop -o cpu -n 5วิธีการบรรลุสิ่งเดียวกัน มีใครรู้บ้าง ฉันจะแตกต่างกับของคุณtop top
boehj

คุณเป็นคนที่มีความแตกต่างด้านบนดังนั้นคุณจะสามารถพูดได้ ด้านบนของฉันไม่มี-oและ-nตั้งค่าจำนวนครั้งที่รีเฟรชหน้าจอก่อนที่จะออก
Caleb

ยุติธรรมพอสมควร ฉันจะไปที่กล่อง Linux ในบ่ายวันนี้และดู ฉันtopดูเหมือนจะไม่ได้มีโหมดแบทช์ซึ่งค่อนข้าง จำกัด ต้องมีวิธีการไพพ์topลงในคำสั่งอื่น ฉันจะทำวิจัย
boehj

ฉันพูดถึงการสลับโหมดแบทช์ในคำตอบของฉัน แต่จริง ๆ แล้วไม่จำเป็นสำหรับด้านบนของฉันเพราะตรวจพบอัตโนมัติเป็นส่วนหนึ่งของไปป์แทนเซสชันแบบโต้ตอบ คุณลองท่อโดยไม่ต้องใช่มั้ย
Caleb

1
จะทำ. GNU topทำงานตามที่อธิบายไว้เมื่อบ่ายนี้ ไชโย
boehj

6

ซับที่เร็วที่สุดที่ฉันพบสำหรับสิ่งนี้ (หมายเหตุ 6 เพราะส่วนหัวเพิ่มขึ้น):

ps aux k-pcpu | head -6

5

โปรดทราบว่าเวอร์ชันปัจจุบันของ ps มีความสามารถในการเรียงลำดับภายในโดยขึ้นอยู่กับรหัสฟิลด์ (ที่ระบุในหน้า man ps) รหัสฟิลด์สำหรับการใช้งานตัวประมวลผลคือ "c" คุณสามารถใช้--sort cเมื่อสิ้นสุดคำสั่ง ps เช่นps aux --sort c

สิ่งนี้จะทำให้กระบวนการใช้ cpu มากที่สุดที่ด้านล่างของรายการ เรียงลำดับย้อนกลับของรายการโดยเพิ่มเครื่องหมายลบลงในโค้ดเขตข้อมูลที่ใช้เรียงลำดับเช่นps aux --sort -c


4

เพื่อเพิ่มจุดให้กับคำตอบที่มีค่าอื่น ๆ ฉันชอบ:

ps auxk-c | head -6

นอกจากนี้ยังพิมพ์ส่วนหัวซึ่งเป็นสิ่งที่ดี

นี่kคือเหมือนกัน--sortและcระบุ%cpuเขตข้อมูลการใช้งาน CPU (นามแฝง) สำหรับการจัดเรียงในขณะที่-สำหรับการจัดเรียงย้อนกลับ

คุณอาจจะเพิ่มมากขึ้น specifiers คั่นด้วย,, specifiers เป็นไปได้อื่น ๆ : %mem, args, bsdstart, pid, gid, uid... ซึ่งคุณสามารถค้นหารายการเต็มรูปแบบใน รูปแบบมาตรฐาน specifiersส่วนของหน้าคน ตัวอย่างเช่น:

 ps auxk -gid,-%mem | head -11

จะพิมพ์ 10 กระบวนการที่มี id กลุ่มสูงสุดเรียงลำดับภายในโดยใช้หน่วยความจำ


3

เครื่องมือบรรทัดคำสั่งpsมีตัวเลือกการเรียงลำดับของตัวเองดังนั้นฉันชอบ:

$ ps -eo pcpu,args --sort=-%cpu | head

คุณสามารถเพิ่มคอลัมน์ที่คุณต้องการ ดูตัวเลือกอื่น ๆ ที่มีให้ในpsหน้า man

$ man ps

0

topบน Mac OS X มีตัวเลือกโหมดการบันทึกในรูปแบบของtop -l numberOfSamples(ซึ่งดูเหมือนจะเทียบเท่ากับโหมดแบทช์ของ GNU top) อย่างไรก็ตามมีความจำเป็นต้องมีอย่างน้อยสองตัวอย่างเนื่องจาก "ตัวอย่างแรกที่แสดงจะมี% CPU ที่ไม่ถูกต้องปรากฏขึ้นสำหรับแต่ละกระบวนการเนื่องจากมีการคำนวณโดยใช้เดลต้าระหว่างตัวอย่าง" ( man 1 top)

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6

0

topจะแสดงสิ่งที่ใช้ CPU ของคุณ หากคุณติดตั้งไว้htopจะช่วยให้คุณควบคุมได้ละเอียดยิ่งขึ้นรวมถึงการกรองโดย - ในกรณีของคุณ - CPU


0

ฉันเชื่อว่าวิธีที่ง่ายที่สุดในการดูกระบวนการซีพียู 5 อันดับแรกคือ

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

หากต้องการดูกระบวนการที่ใช้หน่วยความจำสูงสุด 5 อันดับแรกคือ

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

ที่ไหน

-e : แฟล็กนี้ใช้เพื่อเลือกกระบวนการทั้งหมด

-o : แฟล็กนี้ใช้เพื่อจัดรูปแบบตามที่ผู้ใช้กำหนด

pid : อาร์กิวเมนต์นี้ใช้สำหรับแสดง pid

comm: อาร์กิวเมนต์นี้ใช้สำหรับแสดงชื่อคำสั่งเท่านั้น ที่จะได้รับการใช้งานคำสั่งเต็มargs, cmdหรือcommand

%cpu: อาร์กิวเมนต์นี้แสดงเปอร์เซ็นต์ของการใช้ cpu ของกระบวนการในรูปแบบ "##. #" ที่นี่pcpuยังสามารถใช้

%mem: อาร์กิวเมนต์นี้แสดงอัตราส่วนของขนาดชุดที่อยู่อาศัยของกระบวนการต่อหน่วยความจำกายภาพบนเครื่องซึ่งแสดงเป็นเปอร์เซ็นต์ ที่นี่pmemยังสามารถใช้

--sort: ระบุลำดับการเรียง หลังจาก=ที่-เครื่องหมายถูกใช้ในการเรียงลำดับค่าสูงสุดที่ด้านบนที่ตัวเลือกเริ่มต้นซึ่ง+คือการแสดงรายการลำดับตัวเลขที่เพิ่มขึ้น [เช่น 0 ถึง n]


-2

top -bn1 |sed -n '7,12'pทำงานเป็นซับเล็ก ๆ น้อย ๆ ที่ดีเช่นกัน
แม้ว่าฉันจะชอบใช้ ps กับ --sort = X -o X, Y, Z

ใช้ ps คุณสามารถดึงสถิติ grep ที่แตกต่างกันสำหรับกระบวนการหรือผู้ใช้แล้วรวมหรือ avg พวกเขาด้วยไปป์ awk

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.