디스크 액세스로 인한 IO 대기 시간을 측정하려고 합니다. 이를 위해 나는 delayacct_blkio_ticks
의 응답을 사용합니다 /proc/[pid]/stat
. 내 애플리케이션에서 얼마나 많은 IO가 수행되더라도 내가 얻는 것은 상수 0뿐입니다.
프록 사람들이 말했습니다:
42) delayacct_blkio_ticks %llu (since Linux 2.6.18)
Aggregated block I/O delays, measured in clock ticks (centiseconds).
커널 버전 3.0.101을 사용하고 있습니다.
하지만...을 사용하면 top
0이 아닌 상수 "%wa" 값을 얻습니다.
top - 00:49:36 up 186 days, 15:06, 3 users, load average: 4.54, 5.80, 5.53
Tasks: 270 total, 1 running, 269 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 97.0%id, 3.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 387581M total, 261149M used, 126432M free, 295M buffers
Swap: 12266M total, 193M used, 12073M free, 82346M cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4290 build 20 0 512g 169g 25m S 8 44.9 241:27.65 java
7614 build 20 0 9056 1268 828 R 0 0.0 0:01.28 top
1 root 20 0 10540 560 536 S 0 0.0 0:46.33 init
잘못된 측정값을 읽고 있습니까? top
보고서가 올바른 이유는 무엇입니까 ? 애플리케이션에서 작업을 수행할 때만 WA 값이 0을 초과하므로 다른 프로세스에서 발생한 것이 아니라고 확신합니다.
실제로 Java 프로세스의 상태는 D
. delayacct_blkio_ticks
이 상태는 단지 보고 시간인가요?