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

Высокий объем дискового ввода-вывода при использовании кеша?

Несколько дней назад я заметил ожидание дискового ввода-вывода и падение активности диска (что было великолепно). Затем я также заметил, что мой кеш был заполнен (*) и фрагментирован. Потом очистил кеш. После этого латентность диска и активность диска подскочили на прежний уровень (что было плохо).

IOtop показывает, что [jbd2 / sda2-8] и [flush-8: 00] всегда находятся в верхней части использования диска. Это Dell R210, аппаратный RAID 1 (H200) с большим количеством свободной памяти (всего 16 ГБ, из которых около 8 ГБ - буфер / кеш).

(*) Кэш - это кеш кода операции APC для PHP, который уменьшает доступ к диску для выполнения сценария PHP. Кэш был переполнен и фрагментирован, потому что он включал файлы из экземпляра разработки. Когда я это заметил, я отфильтровал их.

Возникает вопрос: почему дисковый ввод-вывод увеличивается, когда теоретически должен уменьшаться? Ниже приведены графики из мунина. Кеш был заполнен с 6 по 8 февраля.

Изменения после того, как я закомментировал apc.mmap_file_mask, как сообщил @ cyberx86

И через несколько дней https://serverfault.com/a/362152/88934

Если вы используете отображение памяти с файловой поддержкой (например, apc.mmap_file_mask=/tmp/apc.XXXXXX) вы можете увидеть повышенный ввод-вывод.

Попробуйте установить apc.mmap_file_mask использовать разделяемую память (например, /apc.shm.XXXXXX) или в /dev/zero (анонимная карта памяти). Если оставить этот параметр undefined, по умолчанию используется анонимная память mmapped.

Обычно файлы mmapped - отличная вещь:

  • По сравнению с хранением чего-либо полностью в памяти, файлы с расширением mmapped обычно требуют меньше памяти.
  • По сравнению с сохранением чего-либо в файл, файлы с расширением mmapped требуют меньше операций ввода-вывода на диск (поскольку записи могут быть объединены вместе).

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

Таким образом, можно предположить, что пока кэш заполнялся и стабилизировался, он претерпевал наибольшие изменения, которые приходилось постоянно записывать на диск; как только кеш был заполнен, ttl для каждого объекта замедлял скорость передачи данных в кэше, уменьшая изменение и уменьшая количество операций записи на диск.

Через несколько дней я хочу вернуться с графиками. Изменение значительно улучшает эту ситуацию. Это сокращает все, кроме времени обслуживания ввода-вывода (я думаю, это потому, что больше нет тривиального чтения небольших файлов PHP, что является дешевым).

Нагрузка на сервер (она и так была довольно низкой, поэтому изменения я не обнаружил).