디스크 사용률이 100%에 가깝고 iowait가 0.0%인 SunOS에서 이것이 어떻게 가능합니까?

디스크 사용률이 100%에 가깝고 iowait가 0.0%인 SunOS에서 이것이 어떻게 가능합니까?

SunOS5.10 시스템을 모니터링하는 동안 이상한 동작을 발견했습니다.

  1. 디스크 사용률이 100%에 가깝습니다.
  2. 디스크 대기 시간은 0,0%입니다.

이 시스템의 주요 목적은 jvm에서 애플리케이션 서버를 실행하는 것입니다. 이는 서버가 과부하되어 클라이언트 연결이 무작위로 거부될 때 발생합니다. 문제가 IO와 관련된 경우 IO 대기 시간은 아마도 0.0%를 초과해야 합니다. 컴퓨터에서 다른 병목 현상은 보이지 않습니다. CPU, RAM 및 네트워크 인터페이스 사용률이 5% 미만입니다. 디스크가 포화되면 시스템은 초당 약 0.5MB의 데이터를 쓰지만 데이터는 거의 읽지 않습니다.

실시간 모니터링을 sarmon위해 데이터가 덤프됩니다 . iostat -x예제 iostat출력:

extended  device  statistics
device  r/s    w/s    kr/s  kw/s  wait  actv  svc_t  %w  %b
sd0,a   0.0    0.4    0.0    6.2   0.0   0.0   11.5   0   0
sd0,b   0.0    0.0    0.0    0.0   0.0   0.0    0.0   0   0
sd0,c   0.0    0.0    0.0    0.0   0.0   0.0    0.0   0   0
sd0,f   0.0    0.2    0.0    1.6   0.0   0.0   13.9   0   0
sd0,g   0.0    0.0    0.0    0.0   0.0   0.0    0.0   0   0
sd0,h   0.0  111.6    0.0  519.9   0.0   1.0    8.9   0  94

통계는 운영 체제 수준에서 수행되므로 측정이 정확해야 합니다. 애플리케이션 수준에서 디스크 포화도를 안정적으로 감지하고 이에 따라 로드를 줄이는 것이 가능합니까?

이런 일이 발생하면 가능한 시나리오는 무엇입니까?

또한 dd를 사용하여 디스크의 쓰기 속도를 테스트했는데 결과는 다음과 같습니다.

time sh -c "dd if=/dev/zero of=/tmp/output bs=512 count=2048k"
2097152+0 records in
2097152+0 records out
real 0m3.250s
user 0m0.627s
sys  0m2.622s

답변1

4KB가 조금 넘는 데이터를 초당 약 111번 쓰는 스레드가 하나 있는 것 같습니다. 이는 디스크를 100% 사용 상태로 유지하는 데 충분합니다(111 iops * 9 ms 서비스 시간 = 초당 1초 서비스 = 100%). 해당 디스크(실제로는 해당 파티션)에 데이터를 쓰는 다른 프로세스가 없으므로 대기 대기열은 비어 있고 모든 요청은 즉시 처리됩니다.

그러면 작업 부하에 특별하거나 이상한 것이 없습니다. 디스크가 병목 현상을 일으키는 것입니다.

더 나은 성능을 위해 더 빠른 디스크나 SSD를 선택하거나, 분산 쓰기 기능이 있는 디스크 어레이를 사용하거나, 더 큰 블록을 사용하도록 애플리케이션을 조정하거나, 캐시 크기를 늘릴 수 있습니다.

귀하의 dd테스트는 의미가 없습니다. 디스크 성능을 측정하는 것이 아니라 본질적으로 캐시 성능을 측정하는 것입니다. 특히 해당 파일 시스템의 기본값인 /tmp가상 메모리로 뒷받침될 수 있는 Solaris에서는 더욱 그렇습니다.tmpfs

답변2

http://en.wikipedia.org/wiki/Asynchronous_I/O, 프로그램은 I/O 요청을 하고 있지만 기다리지는 않습니다. 그러나 I/O 응답이 도착하면 계속해서 이를 수락하고 처리할 수 있습니다.

관련 정보