Назад |
Перейти на главную страницу
Убийца OOM убивает процесс, хотя кеш страницы никогда не выселяется
На наших производственных серверах иногда под нагрузкой возникает следующая проблема (Linux 4.10):
- Приложение, обрабатывающее нагрузку (веб-сервер), работает с высокой нагрузкой.
- Запускается новое задание (например, cron). Для этого требуется системный вызов clone (), который не может выделить память.
- Kernel OOM killer запускается и останавливает один из процессов приложения веб-сервера, чтобы можно было запустить новое задание.
- «free -m» показывает, что свободной памяти критически мало, около 1-3 ГБ из 64 ГБ на сервере. Однако большая часть памяти находится в кэше страниц.
- В системе нет раздела / файла подкачки, а для vm.swappiness установлено значение по умолчанию 60.
Вместо этого, если бы мы запустили «echo 3> / proc / sys / vm / drop_caches» до начала загрузки, OOM не завершит работу нашего веб-сервера, и все будет работать нормально.
Не освобождает ли ядро в указанных выше условиях кеш страниц перед попыткой убить процесс, чтобы освободить часть памяти?