Может ли высокий уровень использования дискового кэша привести к внешней фрагментации и, в конечном итоге, к сбоям при выделении страниц?

Мы получаем ошибки выделения страниц на сервере 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 в большинстве приложений) для обработки всплесков. Этот вопрос также описывает некоторые настройки ядра, которые вы можете выполнить.

Другие вопросы по тегам