SunOS 上磁盘繁忙接近 100% 而 iowait 为 0.0%,这怎么可能?

SunOS 上磁盘繁忙接近 100% 而 iowait 为 0.0%,这怎么可能?

在监视 SunOS5.10 机器时,我注意到奇怪的行为:

  1. 磁盘繁忙率接近100%
  2. 磁盘等待时间为 0,0%

这台机器的主要目的是在 jvm 上运行应用程序服务器。当服务器负载过重并且客户端连接被随机拒绝时,就会发生这种情况。如果问题与 IO 相关,则 IO 等待时间可能应超过 0.0%。我在机器上看不到任何其他瓶颈:CPU、RAM 充足,网络接口利用率低于 5%。在磁盘饱和时,系统每秒写入大约 0.5 MB 的数据,但几乎不读取任何数据。

数据通过 转储sarmoniostat -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

看起来有一个线程每秒大约 111 次写入略多于 4KB 的数据。这足以使您的磁盘保持 100% 繁忙(111 iops * 9 毫秒服务时间 = 每秒 1 秒服务 = 100%)。由于没有其他进程在该磁盘(实际上是该分区)上写入数据,因此等待队列为空,所有请求都会立即处理。

那么您的工作负载就没有什么特别或奇怪的了,磁盘是瓶颈。

为了获得更好的性能,您可以选择更快的磁盘或 SSD,或者使用分布式写入的磁盘阵列,或者调整应用程序以使用更大的块,或者增加缓存大小。

您的dd测试毫无意义,您不是在测量磁盘性能,而是在本质上测量缓存性能,尤其是在 Solaris 上,其中/tmp可能由虚拟内存支持,tmpfs这是该文件系统的默认设置。

答案2

http://en.wikipedia.org/wiki/Asynchronous_I/O,程序正在发起 I/O 请求,但不等待它们。然而,一旦 I/O 响应到来,它仍然可以接受并处理它们。

相关内容