ฉันจะตรวจสอบจำนวนเธรดของกระบวนการบน linux ได้อย่างไร


144

ฉันต้องการตรวจสอบจำนวนเธรดที่ใช้โดยกระบวนการเฉพาะบน Linux มีวิธีง่ายๆในการรับข้อมูลนี้โดยไม่ส่งผลกระทบต่อประสิทธิภาพของกระบวนการหรือไม่?


จะเป็นอย่างไรถ้ากระบวนการของแอปพลิเคชันทำงานในช่วงเวลาสั้น ๆ ? (พูด 2 วินาที)
user2023370

คำตอบ:


156

ลอง

ps huH p <PID_OF_U_PROCESS> | wc -l

หรือhtop


3
ฉันเชื่อว่าคุณควรลบออก1เพราะมันพิมพ์บรรทัดเหมือนUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDสำหรับส่วนหัวตาราง
AhmetB - Google

2
'h' ซ่อนส่วนหัว
thinkmassive

11
-1 ทำไมต้องต่อท่อเอาท์พุทwcเมื่อคุณทำได้ps -o thcount <pid>? ดูคำตอบนี้
ไหล

หรือ htop - คุณใช้มันเพื่อนับจำนวนเธรดได้อย่างไร?
andrzejdoro

andrzejdoro คุณสามารถเปิดใช้งานได้ในการตั้งค่า htop เพียงกด F2 (ตั้งค่า) - คอลัมน์การตั้งค่า - เลือก NLWP ในคอลัมน์ที่มีและย้ายไปที่คอลัมน์ที่เปิดใช้งาน - F10 เพื่อบันทึก
slav0nic

83

หากต้องการรับจำนวนเธรดสำหรับ pid ที่กำหนด:

$ ps -o nlwp <pid>

ในกรณีที่nlwpยืนสำหรับจำนวนของกระบวนการน้ำหนักเบา (หัวข้อ) ดังนั้นpsนามแฝงnlwpถึงthcountซึ่งหมายความว่า

$ ps -o thcount <pid>

ยังใช้งานได้

หากคุณต้องการตรวจสอบจำนวนเธรดให้ใช้watch:

$ watch ps -o thcount <pid>

ในการรับผลรวมของเธรดทั้งหมดที่ทำงานในระบบ:

$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

2
คำตอบที่มีประโยชน์ที่สุดที่นี่ โดยเฉพาะwatchคำสั่ง. อย่างไรก็ตามโปรดทราบว่าการใช้thcountอาจล้มเหลวสำหรับบางคน (Red Hat ... ) แม้ว่าจะnlwpใช้ได้ผลสำหรับฉัน
Joshua Detwiler

55

/proc/<pid>/taskด้ายในกระบวนการที่แต่ละคนสร้างไดเรกทอรีภายใต้ นับจำนวนไดเร็กทอรีและคุณมีจำนวนเธรด


2
เพื่อเพิ่มความคิดเห็นด้านบน find /proc/<PID>/task -maxdepth 1 -type d -print | wc -lคุณสามารถใช้คำสั่งนี้เพื่อหาจำนวนกระทู้: เพียงแค่แทนที่<PID>ด้วย ID กระบวนการของคุณที่คุณจะได้รับจากtopหรือใช้ps
Navigatron


21

ps -eLfบนเชลล์จะให้รายการเธรดและกระบวนการทั้งหมดที่กำลังทำงานอยู่บนระบบ หรือคุณสามารถเรียกใช้topคำสั่งจากนั้นกด 'H' เพื่อสลับรายการเธรด


นี่คือซอสสำหรับฉัน ฉันไม่ต้องการ จำกัด เพียงกระบวนการเดียว เพิ่ม a -pลงในสิ่งนี้ได้ง่ายหากจำเป็นหรืออย่างอื่น นี่คือขั้นต่ำที่คุณต้องเห็นรายการเธรด
Erick Robertson

8

หากคุณใช้:

ps uH p <PID_OF_U_PROCESS> | wc -l

คุณต้องลบ 1 ออกจากผลลัพธ์เนื่องจากหนึ่งในบรรทัด "wc" กำลังนับคือส่วนหัวของคำสั่ง "ps"


ยินดีต้อนรับสู่ StackOverflow เนื้อหานี้ควรเป็นความคิดเห็นของคำตอบโดย slav0nic อย่างไรก็ตามอย่างที่ฉันเข้าใจเมื่อคุณเข้าร่วม SO ครั้งแรกคุณ (ยัง) ไม่สามารถแสดงความคิดเห็นในคำตอบได้จนกว่าคุณจะได้รับชื่อเสียงดังนั้นการเพิ่มคำตอบจึงเป็นเรื่องเกี่ยวกับทุกสิ่งที่คุณทำได้ คุณถูก; คุณไม่ควรนับบรรทัดส่วนหัวpsเป็นหนึ่งในเธรด
Jonathan Leffler

6

JStack มีราคาไม่แพงนักทางเลือกหนึ่งคือการไพพ์เอาต์พุตผ่าน grep เพื่อค้นหาเธรดที่ใช้งานอยู่จากนั้นไปป์ผ่าน wc -l

กราฟิกมากขึ้นคือ JConsole ซึ่งแสดงจำนวนเธรดสำหรับกระบวนการที่กำหนด


6

นี่คือหนึ่งคำสั่งที่แสดงจำนวนเธรดของกระบวนการที่กำหนด:

ps -L -o pid= -p <pid> | wc -l

ไม่เหมือนpsคำตอบอื่น ๆที่นี่ไม่จำเป็นต้องลบ1ออกจากเอาต์พุตเนื่องจากไม่มีpsบรรทัดส่วนหัวด้วย-o pid=ตัวเลือก


6

$ ps H p pid-id

H - แสดงรายการเธรดทั้งหมดในกระบวนการ

หรือ

$cat /proc/pid-id/status

pid-id คือรหัสกระบวนการ

เช่น .. (ตัดทอนเอาต์พุตด้านล่าง)

root@abc:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000

4

JDK รุ่นใหม่มาพร้อมกับ JConsole และ VisualVM ทั้งสองอย่างเป็นเครื่องมือที่ยอดเยี่ยมในการรับรายละเอียดสกปรกจากกระบวนการ Java ที่ทำงานอยู่ หากคุณต้องดำเนินการโดยใช้โปรแกรมให้ตรวจสอบ JMX



2

วิธีที่ง่ายที่สุดคือใช้ "htop" คุณสามารถติดตั้ง "htop" (เวอร์ชันที่ยอดเยี่ยมกว่า) ซึ่งจะแสดงการใช้งานคอร์กระบวนการและหน่วยความจำทั้งหมดของคุณ

กด "Shift + H" เพื่อแสดงกระบวนการทั้งหมดหรือกดอีกครั้งเพื่อซ่อน กดแป้น "F4" เพื่อค้นหาชื่อกระบวนการของคุณ

การติดตั้งบน Ubuntu หรือ Debian:

sudo apt-get install htop

การติดตั้งบน Redhat หรือ CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

หากคุณต้องการที่จะรวบรวม "htop" จากรหัสที่มาคุณจะพบว่าที่นี่


1

หากคุณกำลังพยายามค้นหาจำนวนเธรดที่ใช้ cpu สำหรับ pid ที่กำหนดฉันจะใช้:

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l

1

คำตอบของฉันคือ gui มากกว่า แต่ยังอยู่ในเทอร์มินัล อาจใช้ Htop ร่วมกับการตั้งค่าเล็กน้อย

  1. เริ่ม htop
  2. เข้าสู่เมนูตั้งค่าโดยกด F2
  3. จากคอลัมน์ซ้ายสุดเลือก "คอลัมน์"
  4. จากคอลัมน์ขวาสุดให้เลือกคอลัมน์ที่จะเพิ่มไปยังเอาต์พุตการตรวจสอบหลัก "NLWP" คือสิ่งที่คุณกำลังมองหา
  5. กด F10

0

หากคุณสนใจเธรดเหล่านั้นที่มีการใช้งานจริงเช่นเดียวกับการทำบางสิ่งบางอย่าง (ไม่ถูกบล็อกไม่ใช่ timed_waiting ไม่รายงานว่า "เธรดกำลังทำงาน" แต่กำลังรอให้สตรีมให้ข้อมูล) ซึ่งต่างจากการนั่งเฉยๆ แต่ใช้งานอยู่ - - แล้วคุณอาจจะสนใจในjstack ใช้งาน

สคริปต์ทุบตีอย่างง่ายนี้จะรันjstackจากนั้นกรองเธรดทั้งหมดซึ่งโดยการวิเคราะห์ฮิวริสติกดูเหมือนจะไม่ทำงานโดยแสดงให้คุณเห็นสแต็กเทรซสำหรับเธรดเหล่านั้นซึ่งใช้รอบ CPU จริงๆ


0

VisualVM สามารถแสดงสถานะที่ชัดเจนของเธรดของกระบวนการ JVM ที่กำหนด

ป้อนคำอธิบายภาพที่นี่


1
การหวดด้วยตนเอง? แด๊ง!
Andrew Scott Evans

0

หากคุณต้องการจำนวนเธรดต่อผู้ใช้ในระบบ linux คุณควรใช้:

ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'

ในขณะที่<USER>ใช้ชื่อผู้ใช้ที่ต้องการ

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