ถ้าฉันใช้ "top" ฉันจะเห็นว่า CPU ตัวไหนไม่ว่างและกระบวนการใดที่ใช้ CPU ทั้งหมดของฉัน
ถ้าฉันใช้ "iostat -x" ฉันสามารถดูไดรฟ์ที่ไม่ว่าง
แต่ฉันจะดูได้อย่างไรว่ากระบวนการใดใช้ปริมาณงานทั้งหมดของไดรฟ์
ถ้าฉันใช้ "top" ฉันจะเห็นว่า CPU ตัวไหนไม่ว่างและกระบวนการใดที่ใช้ CPU ทั้งหมดของฉัน
ถ้าฉันใช้ "iostat -x" ฉันสามารถดูไดรฟ์ที่ไม่ว่าง
แต่ฉันจะดูได้อย่างไรว่ากระบวนการใดใช้ปริมาณงานทั้งหมดของไดรฟ์
คำตอบ:
คุณกำลังมองหาiotop
(สมมติว่าคุณมีเคอร์เนล> 2.6.20 และ Python 2.5) หากทำไม่สำเร็จคุณกำลังมองหาการเชื่อมต่อกับระบบไฟล์ ฉันขอแนะนำอดีต
iotop
ดูเหมือนว่าจะแสดงแบนด์วิดท์ I / O มากกว่าจำนวน IOPS ที่ใช้โดยกระบวนการ สิ่งนี้ไม่เกี่ยวข้องอย่างยิ่ง กระบวนการที่ทำการเขียน + ซิงค์ขนาดเล็กจำนวนมากจะใช้ความจุ IO ของดิสก์มากกว่ากระบวนการที่เขียนชุดข้อมูลขนาดใหญ่ที่ต่อเนื่องกันด้วยความเร็วสูง
[jdb2/nvme0n1p1]
ใน iotop แต่ฉันโชคดีที่ได้เปิดใช้งาน / proc / sys / vm / block_dump และเปรียบเทียบผลลัพธ์กับระบบที่มีประสิทธิภาพ / เสถียรlxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/…มันช่วยค้นหา คอนเทนเนอร์นักเทียบท่าที่วางไข่ตามคำขอ kubectl อย่างต่อเนื่องทำให้เครดิตระเบิดของ EBS นั้นหมดไปพร้อมกับรายการใน/home/spinnaker/.kube/cache/discovery/.../serverresources.json
. เมื่อคุณ จำกัด ขอบเขตให้แคบลงเป็นชื่อผู้ใช้ / กระบวนการบางอย่างเช่นiotop -atku systemd-network | grep kubectl
อาจช่วยได้
หากต้องการทราบว่ากระบวนการใดในสถานะ 'D' (กำลังรอการตอบสนองของดิสก์) กำลังทำงานอยู่:
while true; do date; ps aux | awk '{if($8=="D") print $0;}'; sleep 1; done
หรือ
watch -n1 -d "ps axu | awk '{if (\$8==\"D\") {print \$0}}'"
Wed Aug 29 13:00:46 CLT 2012
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:47 CLT 2012
Wed Aug 29 13:00:48 CLT 2012
Wed Aug 29 13:00:49 CLT 2012
Wed Aug 29 13:00:50 CLT 2012
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:51 CLT 2012
Wed Aug 29 13:00:52 CLT 2012
Wed Aug 29 13:00:53 CLT 2012
Wed Aug 29 13:00:55 CLT 2012
Wed Aug 29 13:00:56 CLT 2012
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:57 CLT 2012
root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush]
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:58 CLT 2012
root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush]
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:59 CLT 2012
root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush]
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:00 CLT 2012
root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush]
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:01 CLT 2012
root 302 0.0 0.0 0 0 ? D May28 3:07 \_ [kdmflush]
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:02 CLT 2012
Wed Aug 29 13:01:03 CLT 2012
root 321 0.0 0.0 0 0 ? D May28 4:25 \_ [jbd2/dm-0-8]
ดังที่คุณเห็นจากผลลัพธ์ jdb2 / dm-0-8 (กระบวนการเจอร์นัล ext4) และ kdmflush จะบล็อก Linux ของคุณอยู่ตลอดเวลา
สำหรับรายละเอียดเพิ่มเติม URL นี้อาจเป็นประโยชน์: ปัญหาLinux Wait-IO
atopยังทำงานได้ดีและติดตั้งได้ง่ายแม้ในระบบ CentOS 5.x รุ่นเก่าซึ่งไม่สามารถเรียกใช้ iotop ได้ กดd
เพื่อแสดงรายละเอียดดิสก์?
เพื่อขอความช่วยเหลือ
ATOP - mybox 2014/09/08 15:26:00 ------ 10s elapsed
PRC | sys 0.33s | user 1.08s | | #proc 161 | #zombie 0 | clones 31 | | #exit 16 |
CPU | sys 4% | user 11% | irq 0% | idle 306% | wait 79% | | steal 1% | guest 0% |
cpu | sys 2% | user 8% | irq 0% | idle 11% | cpu000 w 78% | | steal 0% | guest 0% |
cpu | sys 1% | user 1% | irq 0% | idle 98% | cpu001 w 0% | | steal 0% | guest 0% |
cpu | sys 1% | user 1% | irq 0% | idle 99% | cpu003 w 0% | | steal 0% | guest 0% |
cpu | sys 0% | user 1% | irq 0% | idle 99% | cpu002 w 0% | | steal 0% | guest 0% |
CPL | avg1 2.09 | avg5 2.09 | avg15 2.09 | | csw 54184 | intr 33581 | | numcpu 4 |
MEM | tot 8.0G | free 81.9M | cache 2.9G | dirty 0.8M | buff 174.7M | slab 305.0M | | |
SWP | tot 2.0G | free 2.0G | | | | | vmcom 8.4G | vmlim 6.0G |
LVM | Group00-root | busy 85% | read 0 | write 30658 | KiB/w 4 | MBr/s 0.00 | MBw/s 11.98 | avio 0.28 ms |
DSK | xvdb | busy 85% | read 0 | write 23706 | KiB/w 5 | MBr/s 0.00 | MBw/s 11.97 | avio 0.36 ms |
NET | transport | tcpi 2705 | tcpo 2008 | udpi 36 | udpo 43 | tcpao 14 | tcppo 45 | tcprs 1 |
NET | network | ipi 2788 | ipo 2072 | ipfrw 0 | deliv 2768 | | icmpi 7 | icmpo 20 |
NET | eth0 ---- | pcki 2344 | pcko 1623 | si 1455 Kbps | so 781 Kbps | erri 0 | erro 0 | drpo 0 |
NET | lo ---- | pcki 423 | pcko 423 | si 88 Kbps | so 88 Kbps | erri 0 | erro 0 | drpo 0 |
NET | eth1 ---- | pcki 22 | pcko 26 | si 3 Kbps | so 5 Kbps | erri 0 | erro 0 | drpo 0 |
PID RDDSK WRDSK WCANCL DSK CMD 1/1
9862 0K 53124K 0K 98% java
358 0K 636K 0K 1% jbd2/dm-0-8
13893 0K 192K 72K 0% java
1699 0K 60K 0K 0% syslogd
4668 0K 24K 0K 0% zabbix_agentd
สิ่งนี้แสดงให้เห็นอย่างชัดเจนว่า java pid 9862 เป็นผู้ร้าย
TL; DR
หากคุณสามารถใช้ได้iotop
ให้ทำเช่นนั้น มิฉะนั้นสิ่งนี้อาจช่วยได้
ใช้top
แล้วใช้ทางลัดเหล่านี้:
d 1 = set refresh time from 3 to 1 second
1 = show stats for each cpu, not cumulated
สิ่งนี้จะต้องแสดงค่า> 1.0 wa
สำหรับอย่างน้อยหนึ่งคอร์ - หากไม่มีดิสก์รออยู่ก็ไม่มีการโหลด IO และไม่จำเป็นต้องดูเพิ่มเติม > 15.0 wa
โหลดอย่างมีนัยสำคัญมักจะเริ่มต้น
x = highlight current sort column
< and > = change sort column
R = reverse sort order
เลือก 'S' คอลัมน์สถานะกระบวนการ ย้อนกลับลำดับการจัดเรียงเพื่อให้กระบวนการ 'R' (กำลังทำงาน) แสดงอยู่ด้านบน หากคุณสามารถมองเห็นกระบวนการ 'D' (กำลังรอดิสก์) แสดงว่าคุณมีตัวบ่งชี้ว่าผู้กระทำผิดของคุณคืออะไร
สำหรับผู้ใช้ KDE คุณสามารถใช้การเติม 'ctrl-esc' เรียกใช้การตรวจสอบการทำงานของระบบและมีแผนภูมิกิจกรรม I / O พร้อมรหัสกระบวนการและชื่อ
ฉันไม่มีสิทธิ์อัปโหลดรูปภาพเนื่องจาก "สถานะผู้ใช้ใหม่" แต่คุณสามารถดูรูปภาพด้านล่างนี้ได้ มีคอลัมน์สำหรับอ่านและเขียน IO
คุณได้พิจารณาlsof
(รายการไฟล์ที่เปิดอยู่) หรือไม่?
iotop พร้อมแฟล็ก -a:
-a, --accumulated show accumulated I/O instead of bandwidth