У меня проблема с моим 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', чтобы получить желаемый результат.