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

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

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