Мы получаем сбои при распределении страниц на сервере Linux (ядро 3.2). Нам сказали, что проблема напрямую связана с высоким использованием памяти для кеширования; это привело бы к внешней фрагментации и, в конечном итоге, к ошибкам выделения страниц. Вот выдержка из вывода top:
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), а большое использование памяти для кеширования - хороший знак. Конечно, это приведет к внешней фрагментации, но не сможет ли ядро освободить это пространство, чтобы, например, удовлетворить запрос на выделение четвертого порядка? Примеры программ доступны на http://www.linuxatemyram.com показать, что у приложения нет проблем с выделением памяти в таком сценарии, но было бы иначе, если бы ядру нужно было выделить такой же объем памяти?
Linux будет использовать неиспользуемую оперативную память для кэширования диска, и это хорошо известно, как вы сказали. Однако, если у вас есть приложение, которое использует большой объем ОЗУ одновременно в течение коротких периодов времени, может не хватить доступной памяти, и система не сможет быстро сбросить кэш диска, что приведет к описанной вами ошибке.
Ключ к этому - с самого начала разрешить ошибки выделения страниц. Добавление дополнительной оперативной памяти, безусловно, поможет, если вы можете, как и добавление свопа (обычно я вижу swap = RAM в большинстве приложений) для обработки всплесков. это вопрос также описывает некоторые настройки ядра, которые вы можете сделать.