내 디스크 IO를 모두 사용하는 프로세스
-
20-08-2019 - |
문제
"Top"을 사용하면 CPU가 바쁘고 CPU를 모두 사용하는 프로세스를 볼 수 있습니다.
"iostat -x"를 사용하면 어떤 드라이브가 바쁜지 알 수 있습니다.
그러나 모든 드라이브의 처리량을 사용하는 프로세스를 어떻게 알 수 있습니까?
해결책
당신은 찾고 있습니다 iotop
(커널이 있다고 가정하면> 2.6.20 및 Python 2.5가 있다고 가정). 실패하면 파일 시스템에 연결을 찾고 있습니다. 나는 전자를 추천합니다.
다른 팁
State '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 문제
꼭대기 또한 IOTOP를 실행할 수없는 이전 CentOS 5.X 시스템에서도 잘 작동하며 쉽게 설치됩니다. 때리다 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'상단 호출 시스템 actrivity monitor를 사용할 수 있으며 프로세스 ID 및 이름이있는 I/O 활동 차트가 있습니다.
'새 사용자 상태'로 인해 이미지를 업로드 할 권한이 없지만 아래 이미지를 확인할 수 있습니다. IO 읽기 및 쓰기를위한 열이 있습니다.
당신은 고려 했습니까? lsof
(열린 파일 나열)?
-a 플래그가있는 iotop :
-a, --accumulated show accumulated I/O instead of bandwidth