Назад | Перейти на главную страницу

Отладка проблем ввода-вывода на сервере Linux

Каковы способы отладки проблем ввода-вывода на сервере Linux?

Я использовал:

# nohup top -b -d 10 > /var/log/top.log &
# nohup iotop -b -d 5 -o -t > /var/log/iotop.log &

PS: железо чистое, новое и исправное.

SWAP вообще не используется, и я вижу много:

[jbd2/sda6-8]
[jbd2/sda2-8]
[loop0]
[loop1]
[events/0]
[flush-8:0]
[kondemand/3]
[ksoftirqd/3]
[kblockd/2]

Большую часть времени сервер будет в порядке, затем он будет случайным образом увеличивать среднюю нагрузку до 6,00 ~ 38,00.

Все, что у меня в коробке, - это PHP / Apache / nginx.

Пример:

    top - 03:25:11 up 1 day,  5:00,  3 users,  load average: 6.87, 2.98, 1.90
Tasks: 224 total,   1 running, 222 sleeping,   0 stopped,   1 zombie
Cpu0  :  4.7%us,  1.0%sy,  0.0%ni, 21.3%id, 73.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 15.0%us,  2.3%sy,  0.0%ni, 60.0%id, 22.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  6.7%us,  1.7%sy,  0.0%ni,  0.0%id, 91.3%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni, 91.1%id,  8.6%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   8031932k total,  7971176k used,    60756k free,   231236k buffers
Swap:  8191992k total,        0k used,  8191992k free,  6334420k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
   2231 mysql     20   0 2576m 537m 6348 S  3.0  6.9  66:35.85 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --us
 678511 user 20   0  245m  43m  20m D  1.0  0.6   0:01.08 /usr/bin/php
 678539 user 20   0  255m  49m  21m D  0.7  0.6   0:00.33 /usr/bin/php
 678551 user 20   0  230m  14m 8392 D  0.7  0.2   0:00.08 /usr/bin/php
 678565 user 20   0  231m  17m  10m D  0.7  0.2   0:00.08 /usr/bin/php
     36 root      20   0     0    0    0 S  0.3  0.0   1:04.45 [kblockd/2]
     60 root      20   0     0    0    0 S  0.3  0.0   0:51.02 [kswapd0]
   1653 root      20   0     0    0    0 S  0.3  0.0   0:54.87 [kondemand/2]
   3394 root      20   0  353m 3480 1496 S  0.3  0.0   7:26.66 /usr/sbin/db_governor
 494915 nobody    18  -2 61104  19m  988 S  0.3  0.2   0:38.74 nginx: worker process
 678473 nobody    20   0 96912  13m 2304 S  0.3  0.2   0:00.04 /usr/local/apache/bin/httpd -k start -DSSL
 678474 nobody    20   0 96904  13m 2304 S  0.3  0.2   0:00.04 /usr/local/apache/bin/httpd -k start -DSSL
 678480 user 20   0  229m  17m  10m S  0.3  0.2   0:00.22 /usr/bin/php
 678491 root      20   0 15148 1360  944 R  0.3  0.0   0:00.15 top -c
 678519 user 20   0  233m  30m  20m D  0.3  0.4   0:00.22 /usr/bin/php
 678538 user 20   0  234m  31m  20m D  0.3  0.4   0:00.18 /usr/bin/php
 678567 user 20   0  230m  14m 8392 D  0.3  0.2   0:00.06 /usr/bin/php
 678612 user 20   0  128m 6156 4392 D  0.3  0.1   0:00.01 /usr/bin/php
      1 root      20   0 19356 1388 1064 S  0.0  0.0   0:00.89 /sbin/init

и наверху

66913 be/4 user 1733.28 K/s    0.00 B/s  0.00 % 99.99 % php
66888 be/4 user 734.51 K/s    0.00 B/s  0.00 % 99.99 % php
66275 be/4 user 167.11 K/s    0.00 B/s  0.00 % 99.99 % php
66409 be/4 user 956.03 K/s    0.00 B/s  0.00 % 99.99 % php
66840 be/4 user 15.55 K/s    0.00 B/s  0.00 % 99.99 % php
66825 be/4 user 85.50 K/s    0.00 B/s  0.00 % 99.99 % php
66902 be/4 user 2028.64 K/s    0.00 B/s  0.00 % 99.99 % php
66268 be/4 user 932.71 K/s    0.00 B/s  0.00 % 99.95 % php
66805 be/4 user 489.67 K/s    0.00 B/s  0.00 % 93.08 % php

Это то, что будет случайным образом увеличиваться.

Идеи?

Спасибо за вопрос.

Было бы полезно получить подробную информацию об используемом вами оборудовании.

Это включает в себя марку / модель сервера, настройку дискового массива (RAID-контроллер, уровень RAID, решение для кэширования, количество дисков) и сведения о вашем дистрибутиве Linux и ядре.

Глядя на приведенный выше дамп данных, я подозреваю, что ожидание ввода-вывода из-за нехватки ресурсов или ожидания ресурсов. Это может произойти, когда в дисковом массиве нет кеша записи. Это также может быть причиной резких скачков нагрузки.

Результат такого инструмента, как iostat или собирать будет более полезным для понимания того, что происходит.

Пытаться iostat -x 1 или collectl -sD и выложите результат.