วิธีค้นหากระบวนการที่ใช้งานเครื่อง


10

สถานการณ์: ทันใดนั้นคอมพิวเตอร์ของฉันรู้สึกอืด การเลื่อนของเมาส์ แต่หน้าต่างใช้เวลานานในการเปิด ฯลฯuptimeบอกว่าโหลดเป็น 7.69 และเพิ่มขึ้น

วิธีที่เร็วที่สุดในการค้นหาว่ากระบวนการใดเป็นสาเหตุของการโหลด

ตอนนี้ "สุดยอด" และเครื่องมือที่คล้ายกันไม่ใช่คำตอบเพราะมันแสดงการใช้งาน CPU หรือหน่วยความจำ แต่ไม่ใช่ทั้งสองอย่างในเวลาเดียวกัน สิ่งที่ฉันต้องการคือคำสั่งเดียวที่ฉันสามารถพิมพ์ได้ตามที่เกิดขึ้น - สิ่งที่จะคิดออก

ระบบพยายามที่จะสลับแรม 8GB ไปยังดิสก์เนื่องจากกระบวนการ X ...

หรือ

กระบวนการ X ค้นหาทั่วดิสก์

หรือ

กระบวนการ X ใช้ CPU 400% "

ดังนั้นสิ่งที่ฉันกำลังมองหาคือ iostat, htop / atop และเครื่องมือที่คล้ายกันทำงานเป็นหนึ่งเดียวกับผลลัพธ์เช่นนี้:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

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

ข้อโต้แย้งของฉันเป็นดังนี้: ผู้ใช้สังเกตเห็นปัญหา อาจมีหลายพันเหตุผล ... ดีเกือบ :-) ผู้ใช้ต้องการทราบสาเหตุของปัญหา

โซลูชันปัจจุบันให้ตัวเลขมากมายกับฉันและฉันต้องรู้ว่าตัวเลขเหล่านี้มีความหมายว่าอย่างไร สิ่งที่ฉันกำลังมองหาคือเครื่องมือเมตา 99% ของข้อมูลไม่เกี่ยวข้องกับปัญหา ดังนั้นสิ่งที่เครื่องมือควรทำคือมองหากระบวนการที่หมูทรัพยากรบางอย่างและแสดงรายการเฉพาะพร้อมกับ "กระบวนการนี้ต้องการ CPU จำนวนมากซึ่งสร้าง IRQ จำนวนมากกระบวนการนี้จัดสรร RAM จำนวนมาก (และยังคงเพิ่มขึ้น)"

นี่จะเป็นรายการที่ค่อนข้างสั้น มันจะมากขึ้นง่ายสำหรับคนใหม่นี้เพื่อหาผู้กระทำผิดจากรายการนี้กว่าจากการส่งออกของการพูด, htopซึ่งทำให้ผมประมาณ 5000 หมายเลข แต่ฉันต้องพับกระบวนการแบบมัลติเธรดตัวเอง (ฉันมี 50 สายซึ่งพูดVIRT 2750Mแต่ RAM เพียง 16 GB - เครื่องควรสลับตัวเองไปสู่ความตาย แต่แน่นอนว่านี่เป็นการตีความข้อมูลที่ผิดพลาดอย่างรวดเร็ว)


ฉันไม่เห็นว่าทำไม อาการที่คุณอธิบายไม่ใช่ของถังขยะดิสก์ (จะไม่มีผลกับเมาส์) เม้าส์ซบเซาเป็นซีพียูคลาสสิกที่เต็มประสิทธิภาพ
soandos

1
นี่เป็นเพียงตัวอย่าง กรุณาเอามันกับเม็ดเกลือ ลองนึกภาพว่า noob กำลังนั่งอยู่หน้าคอมพิวเตอร์ที่ไม่รู้อะไรเลย เขาจะหาคำตอบได้อย่างง่ายดายที่สุดว่าเกิดอะไรขึ้น (เช่นโดยไม่ต้องใช้เวลาประมาณครึ่งชั่วโมงเพื่อให้ได้ผลตามที่ต้องการtop)
Aaron Digulla

คุณกำลังมองหา linux ที่เทียบเท่ากับ task manager ที่มี gui และทุกอย่างหรืออย่างอื่นใช่ไหม
soandos

ฉันมองหาสิ่งที่ฉันเรียกใช้และที่ระบุว่า "Process X กำลังบีบอัดเครื่อง"
Aaron Digulla

คำตอบ:


3

ฉันต้องยิ้มให้กับคำตอบเพราะแต่ละคนบอกให้คุณเรียกใช้เครื่องมือ X ปัญหาเดียวคือถ้าสิ่งที่คุณเห็นเป็นระยะ ๆ จะไม่มีทางเชื่อมโยงอะไรเลย เครื่องมืออย่างsarสามารถช่วยได้ถ้าคุณเรียกใช้ด้วยความถี่ที่สูงพอ แต่ฉันจะบอกว่าcollectlดีกว่า

เหมือนsarคุณใช้มันเป็น daemon /etc/init.d/collectl startโดยการติดตั้งรอบต่อนาทีและทำ

ตอนนี้เมื่อคุณเห็นสิ่งที่ซบเซาcollectl -p /var/log/collectl/filename --topจะเล่นข้อมูลและแสดงให้คุณเห็นกระบวนการด้านบน คุณสามารถเรียกใช้collectl --topและดูพวกเขาในเวลาจริง BTW - ทุกสิ่งที่คุณสามารถทำได้ในเวลาจริงคุณสามารถเล่นได้เช่นกัน

สำหรับโหลดซีพียูจะเกิดอะไรขึ้นถ้าคุณถูกอินเตอร์รัปต์มากเกินไป? collectl -sCจะไม่แสดงเฉพาะการโหลดบน CPU แต่ละตัว (หรือใช้-scสำหรับการโหลดโดยเฉลี่ย) แต่จะแสดงการใช้เวลาของพวกเขา รวม-j( -scj) และคุณจะเห็นจำนวนการขัดจังหวะ / CPU ใช้ตัวพิมพ์ใหญ่-Jและคุณจะเห็นประเภทของแต่ละอินเตอร์รัปต์ / CPU

แน่นอนถ้าคุณชอบ vmstat จริงๆคุณสามารถเล่นข้อมูลที่รวบรวมได้ด้วย--vmstatและมันจะแสดงข้อมูลประวัติในรูปแบบ vmstat

มีสวิตช์มากกว่าที่ฉันมีเวลาในรายการ แต่คุณสามารถตรวจสอบได้ที่SourceForgeหรือเพียงแค่ google


ขอบคุณ; นี่ไม่ใช่สิ่งที่ฉันกำลังมองหา แต่อย่างน้อยมันก็เป็นจุดเริ่มต้นที่ดี
Aaron Digulla

เครื่องมือที่ยอดเยี่ยม! และบน Ubuntu (อย่างน้อยตั้งแต่ 12.04) คุณเพียงแค่ต้องติดตั้งแพ็กเกจ - มันจะเริ่มดีมอนโดยอัตโนมัติเมื่อติดตั้งและเริ่มใหม่หลังจากนั้น :)
nealmcb

6

"top" ทำงานได้ดีพอสมควรตราบใดที่คุณดูตัวเลขที่ถูกต้อง มาดูกัน:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

ทีนี้ถ้าระบบช้าเพราะใช้ CPU หมดมันจะแสดงเป็นคอลัมน์ "us" และ "sy" ในแถว "Cpu: s" ซึ่งอยู่ใกล้กัน 100%

ถ้ามันช้าเนื่องจากการสลับ "Mem:" "ฟรี" จะแสดงค่าต่ำมากและค่าสูง "Swap:" "ใช้แล้ว"

หากช้าเนื่องจากI / Oโดยทั่วไป "Cpu:" "wa" จะบอกเวลาที่ใช้ในการรอ I / O

ทีนี้ถ้าคุณรู้ว่ารอ I / O เป็นปัญหาคุณสามารถใช้โปรแกรม "ไอโซโทป" เพื่อรู้ว่ากระบวนการใดสร้าง I / O ส่วนใหญ่


+1 แต่ฉันกำลังมองหาเครื่องมือที่ทำหน้าที่วิเคราะห์ให้ฉันมากขึ้นและพิมพ์กระบวนการพร้อมกับข้อมูลบางอย่างที่ผิดปกติ ฉันไม่ต้องการรวบรวมจากตัวเลข "ดิบ" อะไร?
Aaron Digulla

1
ฉันขอโทษ แต่คุณไม่สามารถแก้ปัญหาเช่นความเชื่องช้าของเครื่องจักรโดยไม่เข้าใจในระดับพื้นฐานความแตกต่างระหว่างความเชื่องช้าที่แตกต่างกัน หากเครื่องมือดังกล่าวมีอยู่ฉันไม่รู้เกี่ยวกับพวกเขา เป็นไปได้ว่าคุณต้องการผู้ดูแลระบบคอมพิวเตอร์ / ผู้ให้บริการที่มีความสามารถ
Zds

มันจะดีถ้าเครื่องมือดังกล่าวมีอยู่เพราะแน่นอนเป็นไปได้ที่จะตรวจสอบโดยอัตโนมัติ: ถ้าฉันสามารถบอกได้จากผลลัพธ์ของtopคอมพิวเตอร์ดังนั้นสามารถ นี่ไม่ใช่รอยยิ้มของ Mona Lisa มันแค่กระทืบตัวเลขบางอย่างเพื่อค้นหา "ไม่ดี"
Aaron Digulla

2

จากการใช้ 400% ฉันจะสมมติว่าคุณมีโปรเซสเซอร์ Quad-core โหลดเฉลี่ยของคุณเกือบสองเท่าของความจุและครึ่งหนึ่งของกระบวนการกำลังรอ CPU

ขั้นแรกให้reniceเชลล์ของคุณเป็น 0 หรือ -10 เพื่อรับระบบที่ตอบสนองได้ดีขึ้นจากนั้นใช้htopเพื่อค้นหากระบวนการที่กระทำผิดและปฏิบัติตามstraceขั้นตอนที่กำหนด เครื่องมืออื่น ๆ ที่อาจมีประโยชน์คือ:

  • vmsat
  • sar
  • iostat
  • pmap

1

เมาส์ที่ทำงานช้าอาจเกิดจากการโหลดอินเตอร์รัปต์สูงเกินไปหรือคอนโทรลเลอร์ USB กำลังยุ่งมาก (ฉันถือว่าเป็นเมาส์ USB)


เครื่องมือใดบ้างที่บอกฉันว่าไดรเวอร์ / ส่วนประกอบใดทำให้โหลด IRQ สูง
Aaron Digulla

1

vmstat สามารถช่วยคุณในแง่ทั่วไป ตัวอย่างการใช้งานคือ:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

คุณสามารถรันทุก ๆ X วินาทีเช่นกัน - เพียงแค่เพิ่มหมายเลข X หลังคำสั่ง

แก้ไข: ในมุมมองของความคิดเห็น ... เขียนต่อไปนี้ไปยังไฟล์และทำให้ไฟล์ที่ปฏิบัติการได้ มันจะบอกคุณกระบวนการ 3 อันดับแรกบนเครื่อง

top -n 1 | tail -16 | head -4 | awk '{print $13}'

หากคุณต้องการที่จะรู้ว่าหน่วยความจำ hogged ซึ่งตรงข้ามกับ CPU แล้วอ่านหน้าคนบนและเปลี่ยนลำดับการแสดงผล


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