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

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

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

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

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



답변

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

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

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

답변

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


답변

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

답변

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

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

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

echo 0 > /proc/sys/vm/block_dump