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

Определите, что вызывает высокий дисковый ввод-вывод

У меня проблема с моим VPS и дисковым вводом-выводом. На моем сервере работает nginx + PHP-FPM + APC. База данных находится на другом выделенном VPS. У меня есть несколько сайтов WordPress MU, живущих на веб-сервере. Средняя скорость ввода-вывода составляет 6 КБ блоков в секунду.

Я пытаюсь понять, что вызывает высокий уровень ввода-вывода.

Вывод 'free -m':

            total   used   free   shared   buffers   cached
Mem:         1005    973     31        0        96      568
-/+ buffers/cache:   307    697
Swap:         255      8    247

Вывод 'iotop':

Total DISK READ: 0.00 B/s | Total DISK WRITE: 3.90 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 2150 be/4 root        0.00 B/s    0.00 B/s  0.00 % 65.25 % [flush-202:0]
 6694 be/4 www-data    0.00 B/s   19.64 K/s  0.00 %  0.00 % php-fpm: pool www
 6700 be/4 www-data    0.00 B/s   23.56 K/s  0.00 %  0.00 % php-fpm: pool www
 8646 be/4 www-data    0.00 B/s  424.12 K/s  0.00 %  0.00 % php-fpm: pool www
10974 be/4 www-data    0.00 B/s   19.64 K/s  0.00 %  0.00 % php-fpm: pool www

Процесс «flush-202: 0» иногда достигает 99% операций ввода-вывода. Я читал, что это процесс очистки кеша диска, но что заставляет его запускаться и как его исправить?

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

Я бы установил наверху, который может представлять данные в реальном времени, например iotop, но имеет то преимущество, что также записывает образцы в течение дня. Через день после его установки я открывал зарегистрированные данные с помощью atop -r log_filename, затем просмотрите образцы с помощью т пока я не обнаружил случаи, когда ввод / вывод, сообщаемый в выводе системного уровня, был высоким. Затем я бы переключил вывод каждого процесса на диск с помощью d чтобы увидеть, какие процессы генерировали активность ввода-вывода.

Это может быть проблема с APC.

Если это работает для вас, в конфигурации PHP установите:

apc.mmap_file_mask = /tmp/apc.shm.XXXXXX

Если это не сработает, полностью удалите параметр apc.mmap_file_mask.

Если не APC, то это что-то еще, использующее кэширование на диске. Как, например, виртуальная память, или лаковый кеш, или что-то, что использует файлы DBM. Там много возможностей. Может быть, даже движок базы данных.

Пользователи APC, вероятно, теперь должны перейти на opcache Zend, который поставляется с более поздними бесплатными дистрибутивами PHP (и более ранними платными, насколько я помню). Настройка opcache может иметь важное значение для управления нагрузкой ввода-вывода. https://www.sitepoint.com/understanding-opcache/ - полезное введение и ссылки на несколько инструментов, которые можно использовать для проверки производительности вашего кеша (в частности, коэффициента совпадений).

Вы можете добиться этого с помощью программы pidstat. В некоторых дистрибутивах он не установлен. Но вы можете скачать пакет sysstate из Вот и скомпилируйте его. Не устанавливайте его, а скопируйте скомпилированный pidstat (или просто запустите его в текущем каталоге). Вы можете передать флаг '-d', чтобы получить желаемый результат.