Иногда бывают ситуации, когда в 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 коментарів “Смотрим нагрузку на диски”
Программа ‘gstat’ на данный момент не установлена. Вы можете установить ее, напечатав:
apt-get install ganglia-monitor
Это не тот gstat, которым смотрят диски – просто названия одинаковые.
FreeBSD
top -m io -o total
ога ))
по моему то чё он предлагает имеет отношение к sql
если zfs на фре то “zpool iostat -vl 1” надо юзать без l
zpool iostat -v 1