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