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

9

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

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

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

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

введите описание изображения здесь введите описание изображения здесь Кэш APC в настоящее время в порядке.

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

введите описание изображения здесь введите описание изображения здесь

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

jcisio
источник
2
Этот график не показывает увеличение IO.
psusi
1
Если вы используете отображение памяти на основе файлов (например apc.mmap_file_mask=/tmp/apc.XXXXXX), вы можете увидеть повышенный ввод-вывод. Попробуйте установить apc.mmap_file_maskиспользование общей памяти (например /apc.shm.XXXXXX) или to /dev/zero(анонимная mmapped memory).
cyberx86
1
@psusi с 6 по 12 февраля по 8 февраля 12 вечера было низким, а затем увеличилось.
jcisio
@ cyberx86 Я только что изменил его (закомментировал эту строку, чтобы использовать анонимную mmapped память), и похоже, что это помогает. Я буду следить еще несколько минут, чтобы увидеть. Спасибо.
jcisio
2
@psusi Есть / было несколько проблем, которые я могу только возобновить, но не могу объяснить: 1 / APC кэш пропущен (но кэш ОС обращался к этим PHP-файлам, поэтому очень мало дискового ввода-вывода, меньше время ожидания, но больше среднего времени ввода-вывода , который в основном фиксирует транзакции MySQL InnoDB) 2 / APC-кэш попал, но APC использовал файлы (тогда пропустили кэш-память ОС, не знаю почему) 3 / краткое, мой вопрос: «когда кэш работал плохо, диска (почти) нет I / O "- то, что вы говорите, полностью противоречит этому.
jcisio

Ответы:

10

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

Попробуйте установить apc.mmap_file_maskиспользование общей памяти (например /apc.shm.XXXXXX) или to /dev/zero(анонимная mmapped memory). При сохранении значения неопределенным по умолчанию используется анонимная mmapped память.

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

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

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

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

cyberx86
источник
4

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

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

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

введите описание изображения здесь

jcisio
источник
Не могли бы вы предоставить внесенные вами изменения?
Мирча Вутцовичи
Прочитайте комментарий к вопросу и принятый ответ. Я закомментировалapc.mmap_file_mask=/tmp/apc.XXXXXX
jcisio
Эй, извините, что беспокою вас. Вы когда-нибудь видели побочный эффект при комментировании строки mmap_file_mask? Я вижу ту же самую проблему ... и это ясно решает мои проблемы использования ввода / вывода. Но мне было интересно ... если больше ничего не сломается! Спасибо!
Хорхе Леандро Перес
У меня не было проблем с комментированием этой строки.
jcisio