19.5. Утилита vmstat
Для получения статистики использования ресурсов центрального процессора, устройств хранения данных и памяти в однострочном формате в составе дистрибутивов имеется утилита . В примере ниже показан вывод утилиты vmstat, обновляющей значения параметров 100 раз в течение каждых двух секунд (или до момента нажатия сочетания клавиш Ctrl-C). В столбце r приводится количество процессов, ожидающих доступности ресурсов центрального процессора, а количество процессов в неактивном состоянии приводится в столбце b. Объем станиц памяти в пространстве подкачки остается неизменным и равным 144 килобайтам, объем свободной оперативной памяти резко снизился с 16.7 МБ до 12.9 МБ. Для получения информации об остальных данных, выводимых утилитой vmstat, следует обратиться к странице руководства man vmstat.
$ vmstat 2 100 procs ----------memory--------- --swap-- ---io--- --system-- ---cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 144 16708 58212 111612 0 0 3 4 75 62 0 1 99 0 0 0 144 16708 58212 111612 0 0 0 0 976 22 0 0 100 0 0 0 144 16708 58212 111612 0 0 0 0 958 14 0 1 99 0 1 0 144 16528 58212 111612 0 0 0 18 1432 7417 1 32 66 0 1 0 144 16468 58212 111612 0 0 0 0 2910 20048 4 95 1 0 1 0 144 16408 58212 111612 0 0 0 0 3210 19509 4 97 0 0 1 0 144 15568 58816 111612 0 0 300 1632 2423 10189 2 62 0 36 0 1 144 13648 60324 111612 0 0 754 0 1910 2843 1 27 0 72 0 0 144 12928 60948 111612 0 0 312 418 1346 1258 0 14 57 29 0 0 144 12928 60948 111612 0 0 0 0 977 19 0 0 100 0 0 0 144 12988 60948 111612 0 0 0 0 977 15 0 0 100 0 0 0 144 12988 60948 111612 0 0 0 0 978 18 0 0 100 0 $
4 iostat Examples
Continuous execution of iostat with specific interval
Execute iostat continuously at specific interval, and up to N times
$ iostat interval count
Execute iostat every 10 seconds for 5 times.
$ iostat 10 5 Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 24.24 1.51 7.49 4.97 0.00 61.79 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 14.06 249.94 121.22 1337998 648912 sr0 0.01 0.23 0.00 1248 0 avg-cpu: %user %nice %system %iowait %steal %idle 13.13 0.00 6.21 0.60 0.00 80.06 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.51 4.01 28.86 40 288 sr0 0.00 0.00 0.00 0 0 avg-cpu: %user %nice %system %iowait %steal %idle 11.11 0.00 5.71 0.00 0.00 83.18 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.30 0.00 3.20 0 32 sr0 0.00 0.00 0.00 0 0 avg-cpu: %user %nice %system %iowait %steal %idle 11.61 0.00 6.51 0.40 0.00 81.48 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 4.10 0.00 68.87 0 688 sr0 0.00 0.00 0.00 0 0 avg-cpu: %user %nice %system %iowait %steal %idle 15.03 0.00 5.91 0.20 0.00 78.86 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.50 0.00 30.46 0 304 sr0 0.00 0.00 0.00 0 0
View only the device report
View only the device report only once.
$ iostat -d Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 12.17 207.67 108.62 1352766 707584 sr0 0.00 0.19 0.00 1248 0
View the device report continuously for every 2 seconds, for 5 times.
$ iostat -d 2 5 Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 11.12 186.33 100.49 1358494 732640 sr0 0.00 0.17 0.00 1248 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.00 108.00 0.00 216 0 sr0 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 5.00 0.00 96.00 0 192 sr0 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.01 0.00 8.04 0 16 sr0 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sr0 0.00 0.00 0.00 0 0
View device statistics for particular devices
When you have multiple devices, and wanted information only about certain devices then you can do that with -p option.
$ iostat -p sda Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 23.71 0.91 8.63 3.20 0.00 63.55 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 9.72 154.75 90.78 1375518 806888 sda1 0.00 0.11 0.00 946 0 sda2 0.00 0.00 0.00 14 0 sda3 4.74 115.66 30.38 1028073 270024 sda4 0.01 0.17 0.00 1522 0 sda5 4.96 38.75 60.40 344427 536864
For viewing multiple devices statistics, you can use
$ iostat -p sda, sdb
View extended statistics report
You can view extended statistics report using -x option.
$ iostat -x sda Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 23.20 0.73 8.62 2.75 0.00 64.70 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 3.65 7.00 4.99 3.64 131.34 85.14 25.10 0.35 40.25 4.55 3.93
№ 17: Nagios – мониторинг сервера и сети
– популярное open source приложение, предназначенное для мониторинга компьютерных систем и сетей. Вы можете легко следить за всеми своими хостами, сетевым оборудованием и сервисами. Приложение может посылать предупреждающее сообщение, когда что-то идет не так, как надо, а затем – еще одно, когда ситуация исправляется. Имеется приложение
— «Fully Automated Nagios» («Полностью автоматизированный Nagios»). Назначение FAN – обеспечить установку Nagios, в том числе и инструментария, предоставляемого сообществом Nagios. FAN распространяется в виде CD образа в стандартном формате ISO, что упрощает установку сервера Nagios.
Вдобавок на дистрибутиве имеется масса инструментальных средств, повышающих практическую отдачу от использования Nagios.
FIO
Заранее проверить производительность дисков можно с помощью fio. Также можно примерно оценить на одной машине производительность дисков и понимать, какой уровень «в среднем по больнице» вы можете ожидать. Это, конечно же, не правильно, но оценить все же поможет. Глубже анализировать результаты, а, главное, методики тестов мне пока трудно.
CentOS:
# yum install fio
Ubuntu:
# apt-get install fio
В общем виде запуск выглядит так:
# fio your.cfg
Файл your.cfg (название произвольное) может быть примерно таким (пример рабочего конфига для теста на чтение):
blocksize=4k filename=/dev/sda rw=randread direct=1 buffered=0 ioengine=libaio iodepth=32
Буферизацию не используем (buffered=0), чтение не последовательное (rw=randread).
Во время выполнения этого теста (а выполняться тест может доооолго, надоест — Ctrl+C, результаты все равно будут) можно запустить iostat и посмотреть, что происходит:
10/02/2015 04:17:37 PM avg-cpu: %user %nice %system %iowait %steal %idle 0.60 0.00 1.70 4.01 0.00 93.69 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 2.80 110.20 1.00 0.43 0.01 8.19 32.23 289.11 289.45 251.20 8.99 100.00 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Обратите внимание на отношение await к svctm: await/svctm = 32,11..11, т.е. можно считать 32
Это и есть iodepth из конфига your.cfg. Теперь проще понять смысл iodepth — мы указываем, насколько хотим в тесте имитировать длинную очередь заданий.
Я не стал ждать два дня, Ctrl+C и вот результат:
readtest: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32 fio-2.1.3 Starting 1 process ^Cbs: 1 (f=1): [439KB/0KB/0KB /s] [109/0/0 iops] fio: terminating on signal 2 readtest: (groupid=0, jobs=1): err= 0: pid=4307: Fri Oct 2 17:15:17 2015 read : io=1920.9MB, bw=448449B/s, iops=109, runt=4491370msec slat (usec): min=5, max=599, avg=49.93, stdev= 8.69 clat (msec): min=10, max=1445, avg=292.21, stdev=208.52 lat (msec): min=10, max=1445, avg=292.26, stdev=208.52 clat percentiles (msec): | 1.00th=, 5.00th=, 10.00th=, 20.00th=, | 30.00th=, 40.00th=, 50.00th=, 60.00th=, | 70.00th=, 80.00th=, 90.00th=, 95.00th=, | 99.00th=, 99.50th=, 99.90th=, 99.95th=, | 99.99th= bw (KB /s): min= 242, max= 527, per=100.00%, avg=438.05, stdev=25.81 lat (msec) : 20=0.01%, 50=5.48%, 100=14.13%, 250=32.05%, 500=30.56% lat (msec) : 750=14.65%, 1000=2.93%, 2000=0.21% cpu : usr=0.54%, sys=1.14%, ctx=501271, majf=0, minf=59 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued : total=r=491736/w=0/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): READ: io=1920.9MB, aggrb=437KB/s, minb=437KB/s, maxb=437KB/s, mint=4491370msec, maxt=4491370msec Disk stats (read/write): sda: ios=491810/3605, merge=257/4862, ticks=143668620/1157164, in_queue=144830660, util=100.00%
Получили 109 iops, что в принципе нормально, диск обычный, SATA.
Авторизуйтесь для добавления комментариев!
14. Monitorix – Мониторинг системы и сети
Monitorix – это бесплатная, не требовательная к ресурсам утилита, которая предназначена для контроля за системой и сетевыми ресурсами в серверах Linux/Unix настолько, насколько это возможно. Она имеет встроенный HTTP веб-сервер, которые регулярно собирает системную и сетевую информацию и отображает её в графиках. Программа следит за нагрузкой на систему и использованием ресурсов, распределением памяти, здоровьем диска, системными сервисами, сетевыми портами, почтовой статистикой (Sendmail, Postfix, Dovecot и пр.), MySQL статистикой и многим другим. Программа предназначена для контроля общей производительности системы и помогает в обнаружении сбоев, узких мест, аномальной активности и т.д.
ENVIRONMENT
iostat
- POSIXLY_CORRECT
-
When this variable is set, transfer rates are shown in 512-byte blocks instead
of the default 1K blocks. - S_COLORS
-
When this variable is set, display statistics in color on the terminal.
Possible values for this variable are
never,always
or
auto(the latter is the default).
Note: On Debian sysstems the colors are displayed by default when output is connected
to the terminal, even if this variable is not set (i.e. unset variable is treated as
if it were set to
auto).Please note that the color (being red, yellow, or some other color) used to display a value
is not indicative of any kind of issue simply because of the color. It only indicates different
ranges of values. - S_COLORS_SGR
-
Specify the colors and other attributes used to display statistics on the terminal.
Its value is a colon-separated list of capabilities that defaults to
H=31;1:I=32;22:M=35;1:N=34;1:Z=34;22.Supported capabilities are:
-
- H=
-
SGR (Select Graphic Rendition) substring for percentage values greater than or equal to 75%.
- I=
-
SGR substring for device names.
- M=
-
SGR substring for percentage values in the range from 50% to 75%.
- N=
-
SGR substring for non-zero statistics values.
- Z=
- SGR substring for zero values.
-
- S_TIME_FORMAT
-
If this variable exists and its value is
ISOthen the current locale will be ignored when printing the date in the report
header. The
iostatcommand will use the ISO 8601 format (YYYY-MM-DD) instead.
The timestamp displayed with option -t will also be compliant with ISO 8601
format.
I. Обзор
1.1 Процессорное время
индикатор процессора | смысл |
---|---|
user | Время пользовательского режима |
nice | Время пользовательского режима (низкий приоритет, хороший> 0) |
system | Время ядра |
idle | свободное время |
iowait | Время ожидания ввода / вывода |
irq | Жесткое прерывание |
softirq | Мягкое прерывание |
Время iowait является ненадежным значением по следующим причинам:
- ЦП не ожидает завершения выполнения ввода-вывода, а iowait — это время ожидания завершения ввода-вывода. Когда ЦП переходит в состояние ожидания, он может запланировать выполнение другой задачи, поэтому время вычисления iowait слишком мало;
- Многоядерный процессор, вычисление iowait не относится к определенному ядру, поэтому очень сложно вычислить iowait каждого процессора;
Релевантная информация:http://man7.org/linux/man-pages/man5/proc.5.html
What is iostat?
Iostat command reports CPU and I/O statistics. iostat command is used during performance analysis to narrow down the problematic areas in the system.
Sample output of iostat command and its explanation:
$ iostat Linux 2.6.31-17-generic (sathiya-laptop) 05/25/10 _i686_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 25.99 0.78 7.43 12.77 0.00 53.03 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 27.40 797.19 201.27 800902 202208 sr0 0.03 1.24 0.00 1248 0
The first line displays general information — Linux kernel version, hostname etc.,
Next two lines displays CPU statistics, in which the first 3 column displays average CPU usage. The 4th column displays the percentage of time the CPU were idle and waited for I/O response. 5th column displays percentage of waiting time of virtual CPU. 6th column displays the percentage of time the CPU is idle.
Remaining line displays the device utilization report. First line in that is headers, such as number of Transfer per second, number of blocks read per second, blocks write per second, total block reads, total block writes.
19.8. Утилиты sadc и sar
Утилита предназначена для записи данных, связанных с использованием ресурсов системы, в файлы , где символы заменяются на номер текущего дня месяца. По умолчанию демон crond исполняет сценарий через каждые 10 минут, а сценарий sal, в свою очередь, запускает на секунду утилиту . Также ежедневно перед полночью демон crond исполняет сценарий , который, в свою очередь, запускает утилиту . Утилита sar читает данные, собранные утилитой sadc в течение дня, и помещает сгенерированный на их основе отчет в файл /var/log/sa/sar??. Эти , созданные утилитой sar, содержат большой объем статистических данных.
Также вы можете использовать утилиту sar для вывода фрагмента собранных статистических данных. В примере ниже приведен такой фрагмент статистических данных, относящихся к центральному процессору.
$ sar -u | head Linux 2.6.9-34.EL (RHELv4u3.localdomain) 01/27/2007 12:00:01 AM CPU %user %nice %system %iowait %idle 12:10:01 AM all 0.48 0.01 0.60 0.04 98.87 12:20:01 AM all 0.49 0.01 0.60 0.06 98.84 12:30:01 AM all 0.49 0.01 0.64 0.25 98.62 12:40:02 AM all 0.44 0.01 0.62 0.07 98.86 12:50:01 AM all 0.42 0.01 0.60 0.10 98.87 01:00:01 AM all 0.47 0.01 0.65 0.08 98.80 01:10:01 AM all 0.45 0.01 0.68 0.08 98.78 $
Существуют и другие полезные параметры утилиты sar, такие, как , позволяющий выводить информацию об обработке запросов прерываний для каждого из обработанных запросов прерываний и для каждого центрального процессора, или , управляющий обработкой статистических данных, связанных с памятью. Для ознакомления с другими параметрами утилиты sar обратитесь к странице руководства man sar.
№14: tcpdump – детальный анализ сетевого трафика
Команда tcpdump – простая команда, выдающая дамп сетевого трафика. Однако, вам нужно
хорошо понимать протоколы TCP/IP для того, чтобы использовать это средство. Например, для того, чтобы показать информацию о трафике DNS, введите следующее:
# tcpdump -i eth1 'udp port 53'
Для того, чтобы показать все IPv4 HTTP пакеты, идущие на порт и с порта 80, т.е. выдать только те пакеты, которые содержат данные, и, например, не учитывать пакеты SYN и FIN и пакеты ACK-only, введите следующее:
# tcpdump 'tcp port 80 and (((ip - ((ip&0xf)<2)) - ((tcp&0xf0)>>2)) != 0)'
Для того, чтобы показать все сессии FTP для адреса 202.54.1.5, введите следующее:
# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'
Для того, чтобы показать все сессии HTTP для адреса 192.168.1.5, введите следующее:
# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'
Введите следующую команду и используйте для просмотра подробностей программу анализа
:
# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
Синтаксис и основные опции команды iostat
Синтаксис команды iostat предполагает использование трёх основных опций. Среди которых: интервал замера (в секундах), количество отчётов, а также устройство. В общем виде синтаксис следующий:
iostat ] интервал количество_отчётов
В качестве параметра device задаётся анализируемое устройство хранения. Параметры интервал и количество_отчётов задают периодичность замеров и количество выводимых отчётов соответственно.
Среди дополнительных опций самыми полезными являются следующие:
Опция | Значение |
-p | Показывает статистику для указанного устройства с детализацией по его разделам. |
-s | Выводит отчёты в кратком виде. |
-x | Выводит отчёты в подробном виде. |
-t | Выводит значение времени, в которое выполнялся/формировался каждый отчёт. |
Остальные опции используются довольно редко. Об их назначении можно более подробно узнать из справочного руководства команды iostat: man iostat.
IOSTAT
Пример вывода iostat на незагруженной в данный момент старенькой системе из двух SATA HDD в soft raid 1 (зеркало) mdadm:
10/02/2015 12:30:58 PM avg-cpu: %user %nice %system %iowait %steal %idle 5.22 0.00 1.91 8.23 0.00 84.64 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 40.20 1.80 0.39 0.00 19.24 0.21 4.90 4.51 18.94 sdb 0.00 0.00 0.00 1.80 0.00 0.00 3.67 0.01 7.22 7.11 1.28 md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md2 0.00 0.00 40.20 0.40 0.39 0.00 19.82 0.00 0.00 0.00 0.00 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Команда выглядела так:
iostat -x -t -m 5
-x — расширенная статистика
-t — выводить время для каждой порции замеров
-m — результаты в Мбайт
5 — интервал замеров 5 секунд.
Если нужны не история, а динамика процесса, попробуйте так:
watch iostat -x -t -m 1 2
В этом выводе r/s и w/s это отправленные к устройству запросы на выполнение (IOPS, которые хотелось бы, чтобы устройство выполнило).
await — время, включающее ожидание выполнения запроса (как если бы вы встали в очередь в кассу и ждали бы, пока вас обслужат).
svctm — время, реально затраченное на выполнение запроса (время «на самой кассе»).
Для обычных SATA дисков нагрузка IOPS где-то до 100-130 вполне выполнимая. В момент проведения замеров запрошенная нагрузка была 40 IOPS, поэтому запрос практически в очереди и не стоял, его обслужили почти сразу (на «кассе» никого не было). Поэтому await практически равен svctm.
Другое дело, когда нагрузка на диск вырастает:
10/02/2015 12:33:21 PM avg-cpu: %user %nice %system %iowait %steal %idle 10.36 0.00 10.26 52.41 0.00 26.97 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 2.80 3800.40 65.20 327.80 5.97 16.12 115.07 45.79 116.45 2.38 93.38 sdb 0.20 3799.00 18.80 329.00 2.41 16.12 109.09 35.00 100.60 2.08 72.28 md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md2 0.00 0.00 87.00 4124.80 8.38 16.11 11.91 0.00 0.00 0.00 0.00 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
%iowait — простой процессора (время в процентах) от или процессоров, в то время пока обрабатывались запросы. Т.е. в среднем процессор отдыхал почти 50% времени.
%user — загруженность процессора пользовательскими приложениями. По этому параметру видно, например, что в данный период процессор был почти не занят
Это важно, т.к. может помочь отсечь подозрения в тормозах из-за процессора
Замер сделан во время переноса большого количества писем из одной папки IMAP в другую
Особо обратите внимание на await и svctm. Налицо длинная очередь (отношение await к svctm)
Дисковая система (или чипсет, или медленный контроллер SATA, или…) не справляется с запрошенной нагрузкой (w/s).. Для пользователей в этот момент все выглядело просто — сервер тупит или даже завис.
iostat — статистика использования устройств и разделов дисков
Утилита iostat также включена в пакет sysstat. Как можно догадаться из названия программы, она создаёт отчёты по статистике ввода/вывода для устройств и разделов. Её особенностью является то, что она показывает обобщённую статистику для всей системы, а также для отдельных носителей, не разбивая её на процессы. Программа iostat может пригодиться когда необходимо ответить на вопрос: «какой из постоянных носителей подвергается наибольшей нагрузке?».
Запуск программы без опций
iostat
выведет два блока информации:
- отчёт по использованию ЦПУ
- отчёт по использованию устройств
Раздел со статистикой использований устройств содержит следующие разделы:
- Device — имя устройства или раздела, как оно указано в /dev
- tps — указывает количество передач в секунду, отправленных на устройство. Передача — это запрос ввода-вывода к устройству. Несколько логических запросов можно объединить в один запрос ввода-вывода к устройству. Размер перевода является неопределённой величиной
- kB_read/s — указывает объём данных, считанных с устройства, выраженный в количестве блоков (килобайт, мегабайт) в секунду. Блоки эквивалентны секторам и поэтому имеют размер 512 байт
- kB_wrtn/s — указывает объём данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду
- kB_dscd/s — указывает количество данных, отбрасываемых устройством, выраженное в количестве блоков (килобайт, мегабайт) в секунду
- kB_read — общее количество прочитанных блоков (килобайт, мегабайт)
- kB_wrtn — общее количество записанных блоков (килобайт, мегабайт)
- kB_dscd — общее количество отброшенных блоков (килобайт, мегабайт)
Отчёт выводит для всей системы с момента её загрузки.
Поскольку по умолчанию данные выводятся в килобайтах, а современные объёмы информации, записываемой на диск, обычно кратны гигабайтом, что цифры трудны для восприятия. Для вывода чисел в удобных для восприятия единицах используйте опцию -h:
iostat -h
Опция -h является эквивалентом указания сразу двух опций —human и —pretty, поэтому если вы не в полной мере довольны видом выводимого отчёта, то попробуйте использовать эти опции по отдельности.
Для вывода максимальной полной информации, укажите опцию -x:
iostat -x
Если вам нужна информация только об устройствах, то используйте опцию -d:
iostat -d
Вы можете запустить команду указав время интервала (в секундах) и счётчик (количество отчётов) — в этом случае программа будет выводить информацию через заданный интервал:
iostat ИНТЕРВАЛ iostat ИНТЕРВАЛ СЧЁТЧИК
Первый отчёт будет содержать информацию с момента загрузки системы, а последующие отчёты будут содержать информацию за период, прошедший с предыдущего отчёта.
Для поиска проблем, вы можете использовать следующую команду, которая непрерывно будет выводить информацию:
iostat -d 1 iostat -dx 1
С помощью iostat вы можете следить за скоростью чтения и записи на всё устройство, а также выявлять отброшенные блоки.
vmstat
Вы можете использовать команду , в основном, для контроля того, что происходит с виртуальной памятью. Для того, чтобы получить наилучшую производительность системы хранения данных, Linux постоянно обращается к виртуальной памяти.
Если ваши приложения занимают слишком много памяти, вы получите чрезмерное значение затрат страниц памяти (page-outs) — программы перемещаются из оперативной памяти в пространство подкачки вашей системы, которое находится на жестком диске. Ваш сервер может оказаться в таком состоянии, когда он тратит больше времени на управление памятью подкачки, а не на работу ваших приложений; это состояние называемое пробуксовкой (thrashing). Когда компьютер находится в состоянии пробуксовки, его производительность падает очень сильно. Команда , которая может отображать либо усредненные данные, либо фактические значения, может помочь вам определить программы, которые занимают много памяти, прежде, чем из-за них ваш процессор перестанет шевелиться.
[править] Понятные имена томов в выводе iostat
Для вывода нормальных имён томов в iostat
нужно использовать ключ -N:
%# iostat -N
Если iostat не понимает ключ -N, она показывает
имена томов, которые чаще всего оказываются неинформативными
для администратора:
$ iostat -dx Linux 2.6.18-4-xen-686 (cholpon) 14.02.2008 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0,44 128,55 1,77 3,36 57,23 1055,45 216,61 0,98 189,81 3,00 1,54 sdb 0,08 0,00 0,05 0,00 0,60 0,00 12,57 0,00 1,92 1,61 0,01 dm-0 0,00 0,00 0,03 0,00 0,22 0,00 7,99 0,00 4,08 0,76 0,00 dm-1 0,00 0,00 0,03 0,00 0,21 0,00 7,98 0,00 3,96 1,00 0,00 dm-2 0,00 0,00 0,28 123,53 13,62 988,24 8,09 111,58 901,24 0,07 0,81 dm-3 0,00 0,00 0,02 0,48 1,06 3,83 9,75 0,02 37,80 0,67 0,03 dm-4 0,00 0,00 0,00 0,00 0,01 0,00 7,70 0,00 2,00 2,00 0,00 dm-5 0,00 0,00 0,03 0,00 0,22 0,00 7,99 0,00 1,69 0,75 0,00 dm-6 0,00 0,00 0,20 2,48 3,52 19,85 8,72 0,02 6,06 1,28 0,34
Здесь, видно, напимер, что нагрузка на dm-2 выше чем на другие LVM
тома, но сразу не видно, какому именно тому соответствует dm-2.
Это можно выяснить вручную:
%$ ls -l /dev/dm-2 brw-rw---- 1 root disk 254, 2 Фев 14 12:49 /dev/dm-2 %$ ls -l /dev/mapper/| grep '254,\s*2' brw-rw---- 1 root disk 254, 2 Фев 14 12:49 MAIN-xen
Однако выяснять так каждый раз для каждой записи
неудобно. Было бы лучше, если бы имена были сразу
в таблице были представлены правильно.
Функция dm_convert, представленная ниже,
преобразует имена томов к понятной форме.
Она работает как фильтр: обрабатывает стандартный поток ввода,
и отправляет результат на поток вывода.
При замене учитывается то, что имена могут иметь разную
длину, и что данные должны сохранить форматирование.
dm_convert() { sed "s/ / /; $( \ LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25, | sort -n -k +6 | awk '{print $10}' \ | sed 's@/dev/@@; s@mapper/@@' \ | perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; $p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')" }
теперь вы можете пропускать вывод iostat через dm_convert’
и получать сразу понятные результаты:
Замер нагрузки на подсистему ввода/вывода с помощью iostat
$ iostat -dx 1 100 | dm_convert Linux 2.6.18-4-xen-686 (cholpon) 14.02.2008 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0,43 124,98 1,74 3,33 55,91 1026,56 213,52 0,95 186,94 2,97 1,51 sdb 0,08 0,00 0,05 0,00 0,58 0,00 12,57 0,00 1,92 1,61 0,01 VG2-music 0,00 0,00 0,03 0,00 0,22 0,00 7,99 0,00 4,08 0,76 0,00 VG2-xentaur 0,00 0,00 0,03 0,00 0,20 0,00 7,98 0,00 3,96 1,00 0,00 MAIN-xen 0,00 0,00 0,27 120,02 13,23 960,13 8,09 108,41 901,22 0,07 0,79 MAIN-backup 0,00 0,00 0,02 0,47 1,04 3,74 9,74 0,02 37,61 0,67 0,03 MAIN-movies 0,00 0,00 0,00 0,00 0,01 0,00 7,70 0,00 2,00 2,00 0,00 MAIN-iso 0,00 0,00 0,03 0,00 0,21 0,00 7,99 0,00 1,69 0,75 0,00 MAIN-home 0,00 0,00 0,19 2,47 3,43 19,74 8,71 0,02 5,94 1,26 0,34 ...
Для того чтобы смотреть статистику не в виде бесконечной,
бегущей по консоли полосы, а в виде постоянно обновляющегося окна (a-la top),
вы можете использовать программу watch (или display в FreeBSD).
Но в этом случае dm_convert должен быть оформлен не как
функция shell, а как отдельный скрипт:
%$ cat /usr/local/bin/dm_convert #!/bin/sh sed "s/ / /; $( \ LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25, | sort -n -k +6 | awk '{print $10}' \ | sed 's@/dev/@@; s@mapper/@@' \ | perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; $p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')"
Скрипт должен быть исполняемым:
%# chmod +x /usr/local/bin/dm_convert
Теперь можно вызывать программу просмотра статистики нагрузки iostat
и смотреть на какие тома LVM наибольшая нагрузка:
%# iostat -dx 2 2 | dm_convert %# watch 'iostat -dx 2 2 | dm_convert'
Если вы используете систему виртуализации, то результаты автоматическ означают
какую дисковую активность создаёт тот или иной виртуальный домен.
Собранная информация может быть отправной точкой, для того чтобы регулировать
приоритеты ввода/вывода для доменов с помощью dm-band.
В любом случае, это позволит выяснить какие именно задачи
создают на дисковую подсистему системы виртуализации наибольшую нагрузку.