리눅스-디스크 IO를 기다리는 것을 어떻게 볼 수 있습니까?


42

로드가 정말 높은 서버가 있습니다. CPU 사용량 측면에서 나에게 아무것도 튀어 나오지 않으며 스왑되지 않습니다.

일부 프로세스가 디스크 IO를 기다리는 원인이라고 생각하며 대기중인 것을보고 싶습니다.

어떤 프로세스가 IO를 기다리고 있는지 보여줄 프로그램이 있습니까? 나는 알고 iotop있지만 그것은 현재 IO를하고있는 것을 보여줍니다.

아니면 바보 같은 질문입니까? (그렇다면 어떻게 설명하십시오 :))

답변:


47

iotop과 같은 I / O 모니터를 사용할 수 있지만 현재 I / O 작업이있는 프로세스 또는 스레드 만 표시합니다.

I / O를 기다리는 프로세스를 찾아야하는 경우 watch를 사용하여 아래와 같이 STAT 플래그 'D'가있는 프로세스를 모니터하십시오.

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"

단. 이것은 나를 잘 도와주었습니다.
Stu Thompson

2
또는 iotop --help에 따라 'I / O를 실제로 수행하는 프로세스 또는 스레드'만 표시하는 'iotop -o'명령을 사용할 수 있습니다.
Ryan

1
@Ryan 필수 정보를 제공 하지 않고 높은 권한이 필요합니다. , 및 단지 필요한 정보를 제공하고, 상승 된 권한을하지를 필요로 않습니다. iowaitiotopwatchpsawk
Rich

4
나는 psPOSIX 플래그를 사용 awk하여 다르게 알아 냈을 것입니다 : watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"-이렇게하면 열 머리글과 stat, pid 및 명령을 얻습니다.
Rich

18

ps axu"D"상태 인 프로세스를 찾으십시오. ps (1) 맨 페이지를 기반으로 D 상태에있는 프로세스는 중단 할 수없는 절전 상태에 있으며 거의 ​​항상 'IO를 기다리는 중'을 의미합니다. 불행히도, 이러한 프로세스를 죽이는 것은 일반적으로 불가능합니다.


16

Zanchey의 대답은 IO를 기다리는 것이 무엇인지 아는 가장 좋습니다.

서버의 부하가 높다고 말할 때 그 의미는 무엇입니까? 특히 무언가가 느리게 반응합니까?

디스크 IO에 병목 현상이 있는지 궁금하다면 iostat 명령 (sysstat 패키지의 일부)을 사용하여 디스크에 실제로로드가 심한 지 확인하십시오.

예:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

1
iostat의 출력을 해석하여 디스크가 실제로 부하가 큰지 확인하는 방법을 설명하면 도움이됩니다.
Scott Buchanan

0

블록 읽기 / 쓰기 작업을 수행중인 프로세스의 block_dump 로깅을 활성화하십시오 .

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

완료되면 추적을 비활성화하여 로그 파일을 스팸하지 않도록합니다.

echo 0 > /proc/sys/vm/block_dump
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.