Может ли высокий уровень использования дискового кэша привести к внешней фрагментации и, в конечном итоге, к сбоям при выделении страниц?
Мы получаем ошибки выделения страниц на сервере Linux (ядро 3.2). Нам сказали, что проблема напрямую связана с высоким использованием памяти для кеша; это приведет к внешней фрагментации и, в конечном итоге, к ошибкам размещения страниц. Вот выдержка из вершины:
top - 10:45:09 up 3 days, 17:10, 0 users, load average: 1.00, 0.97, 1.08
Tasks: 313 total, 3 running, 310 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.9%us, 1.2%sy, 0.0%ni, 89.8%id, 0.2%wa, 0.0%hi, 0.9%si, 0.0%st
Mem: 8174056k total, 7948312k used, 225744k free, 278412k buffers
Swap: 2072348k total, 180k used, 2072168k free, 4676676k cached
Нам сказали, что проблема устраняется путем периодического освобождения кэшей:
echo 3 > /proc/sys/vm/drop_caches
Мне сказали уменьшить использование кеша, чтобы определенно решить проблему. Но я не хочу верить, что кэширование приведет к ошибкам при распределении страниц. Я понимаю, что память, выделенная для кэширования диска, в основном является свободной памятью (согласно http://www.linuxatemyram.com/), и высокое использование памяти для кэширования является хорошим признаком. Конечно, это приведет к внешней фрагментации, но не сможет ли ядро освободить это пространство, например, для удовлетворения запроса на выделение 4-го порядка? Примеры программ, доступных по адресу http://www.linuxatemyram.com/ показывают, что у приложения нет проблем с выделением памяти при таком сценарии, но будет ли что-то отличаться, если ядру потребуется выделять такой же объем памяти?
1 ответ
Linux будет использовать неиспользуемую оперативную память для кэширования диска, и это хорошо известно, как вы сказали. Однако, если у вас есть приложение, которое использует много оперативной памяти одновременно для коротких периодов времени, возможно, вам не хватит доступной памяти, и система не сможет выгрузить дисковый кэш достаточно быстро, что приведет к описанной вами ошибке.
Ключом к этому является разрешение сбоев выделения страниц для начала. Добавление дополнительной оперативной памяти, безусловно, поможет, если вы можете, как и добавление swap (обычно я вижу swap=RAM в большинстве приложений) для обработки всплесков. Этот вопрос также описывает некоторые настройки ядра, которые вы можете выполнить.