Смотрим нагрузку на диски

Иногда бывают ситуации, когда в top’e вроде бы всё нормально, но сервер всё равно тормозит. Тогда нужно обратить внимание на нагрузки дисковой подсистемы. В статье мы рассмотрим варианты для Unix систем: FreBSD, OpenBSD, Linux, Solaris.

FreeBSD

Во FreeBSD есть штатная утилита gstat, при запуске которой без параметров мы увидим текущую нагрузку на диски.

#gstat
dT: 1.043s  w: 1.000s
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    1    248     81   5154   10.0    168  11719    7.1   93.5| ad4
    0      0      0      0    0.0      0      0    0.0    0.0| md0
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1a
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1b
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1d
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1e
    0      0      0      0    0.0      0      0    0.0    0.0| amrd0s1f

Как видно из примера, очень большая нагрузка на диск ad4.

Так же можно смотреть и через iostat (пример из другой ОС):

#iostat -x 1
                        extended device statistics
device     r/s   w/s    kr/s    kw/s qlen svc_t  %b
ada0       1.8   5.0     8.9   115.0    0  11.1   1
pass0      0.0   0.0     0.0     0.0    0   0.0   0
                        extended device statistics
device     r/s   w/s    kr/s    kw/s qlen svc_t  %b
ada0       2.0   0.0    35.8     0.0    0   2.9   1
pass0      0.0   0.0     0.0     0.0    0   0.0   0

А ещё можно использовать команду systat -iostat:

                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   |||

          /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
cpu  user|XXXXXX 
     nice| 
   system|X
interrupt|
     idle|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

          /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
ad8   MB/sXXXXXXXX
      tps|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX144.17
ad10  MB/s 
      tps|XXXXXXXXXX

А что-бы определить процесс, который нагружает диски, выполним такую команду:

#top -m io -o total

OpenBSD

Для OpenBSD есть штатная утилита iostat, которая показывает нагрузку на диски+CPU usage. При обычном запуске она показывает не больше 4 дисков, но если нужно больше, то указываем все нужные диски.

# iostat -w 1 wd0 wd1 wd2 wd3 wd4 wd5
      tty            wd0             wd1             wd2             wd3             wd4             wd5             cpu
 tin tout  KB/t t/s MB/s   KB/t t/s MB/s   KB/t t/s MB/s   KB/t t/s MB/s   KB/t t/s MB/s   KB/t t/s MB/s  us ni sy in id
   0    6 15.99   0 0.00  15.98   0 0.00  12.16   5 0.05  13.54   0 0.00  15.64   0 0.00  15.84   0 0.00   0  0  0  0 99
   0  725  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100
   0  242  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100
   0  242  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100
   0  242  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100
   0  242  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100
   0  242  0.00   0 0.00   0.00   0 0.00  16.00   2 0.03   0.00   0 0.00   0.00   0 0.00   0.00   0 0.00   0  0  0  0100

Linux

Для Linux есть аналог утилиты gstat — iostat. В Debian/Ubuntu она находится в пакете sysstat.

#iostat -p 1
Linux 2.6.26-2-686        02/02/2012      _i686_

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.55    0.10    0.28    5.09    0.00   88.98

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              21.11       169.01       847.22  581573217 2915262040
sda1              0.00         0.00         0.00       6198       5000
sda2             21.11       169.01       847.22  581566715 2915257040

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    8.90    0.00   91.10

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
sda1              0.00         0.00         0.00          0          0
sda2              0.00         0.00         0.00          0          0

Здесь мы поставили автообновление каждую секунду. Хочу обратить внимание на то, что первые пару выводов во внимание не брать, так как в первом выводе отображается информация из кеша, а не реальные показатели. Как видим, диски здесь не нагружены

Для определения процесса, который нагружает диски, есть утилита iotop, правда её нужно ставить отдельно.

Solaris

Для solaris существует 3 метода: zpool iostat, утилита iostat, fsstat. Единственный недостаток, это то, что мы не сможем отображать статистику отдельно по каждой из zfs, а только можем отдельно по каждому диску:

# zpool iostat -vl 1
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool       3.29G  12.6G      4     23   150K   125K
  c4t0d0s0  3.29G  12.6G      4     23   150K   125K
----------  -----  -----  -----  -----  -----  -----

               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool       3.29G  12.6G      0      0      0      0
  c4t0d0s0  3.29G  12.6G      0      0      0      0
----------  -----  -----  -----  -----  -----  -----
# iostat -Cxn 5
                    extended device statistics
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C5003BD6AC2Fd0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C50042E0EE17d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C50042E0F85Bd0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C5003BD6A46Fd0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C5003BCBFFFBd0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t5000C50042E16163d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t600144F00200000000004EF354850001d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t600144F0D0BEC80000004EF4BC960001d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t600144F00200000000004EF2A7E20001d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t600144F00200000000004EF48B630001d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c3
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c3t0d0

Здесь как и в случае с Linux не учитываем первый вывод. Как видим, диски простаивают (значение столбца %b — busy).

Общую картину можно так же посмотреть через fsstat:

$ fsstat -i zfs 1
 read read  write write rddir rddir rwlock rwulock
  ops bytes   ops bytes   ops bytes    ops     ops
2.16G 7.97T  423M 4.20T 75.3M  9.7G  2.68G   2.68G zfs
5.35K 37.0M 1.07K 18.5M    32 4.25K  6.47K   6.47K zfs
5.50K 38.0M 1.14K 19.0M    22 2.92K  6.68K   6.68K zfs
5.39K 37.1M 1.03K 18.5M    58 7.70K  6.50K   6.50K zfs
5.38K 37.9M 1.10K 18.9M    20 2.66K  6.51K   6.51K zfs

Очень удобно просматривать информацию по конкретной zfs:

$ fsstat -i /export/home/user55 1
 read read  write write rddir rddir rwlock rwulock
  ops bytes   ops bytes   ops bytes    ops     ops
 466M  922G 5.18M 1.17T 74.5M 9.01G   582M    582M /export/home/user55
   70 21.0K     0     0    20 2.66K    100     100 /export/home/user55
   77 23.1K     0     0    22 2.92K    110     110 /export/home/user55
  119 35.8K     0     0    34 4.52K    170     170 /export/home/user55

Смотрим нагрузку на диски: 5 комментариев

  1. ttys

    Программа ‘gstat’ на данный момент не установлена. Вы можете установить ее, напечатав:
    apt-get install ganglia-monitor

    1. skeletor Автор записи

      Это не тот gstat, которым смотрят диски — просто названия одинаковые.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *