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

Убийца OOM убивает процесс, хотя кеш страницы никогда не выселяется

На наших производственных серверах иногда под нагрузкой возникает следующая проблема (Linux 4.10):

  1. Приложение, обрабатывающее нагрузку (веб-сервер), работает с высокой нагрузкой.
  2. Запускается новое задание (например, cron). Для этого требуется системный вызов clone (), который не может выделить память.
  3. Kernel OOM killer запускается и останавливает один из процессов приложения веб-сервера, чтобы можно было запустить новое задание.
  4. «free -m» показывает, что свободной памяти критически мало, около 1-3 ГБ из 64 ГБ на сервере. Однако большая часть памяти находится в кэше страниц.
  5. В системе нет раздела / файла подкачки, а для vm.swappiness установлено значение по умолчанию 60.

Вместо этого, если бы мы запустили «echo 3> / proc / sys / vm / drop_caches» до начала загрузки, OOM не завершит работу нашего веб-сервера, и все будет работать нормально.

Не освобождает ли ядро ​​в указанных выше условиях кеш страниц перед попыткой убить процесс, чтобы освободить часть памяти?