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

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

На наших серверах в процессе производства иногда под нагрузкой возникают следующие проблемы (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 не завершил бы работу нашего приложения веб-сервера, и все работало бы нормально.

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

Связанный контент