Что означает ошибка ENOMEM
Ошибка ENOMEM (Not enough memory) возникает, когда ядро Linux не может выделить запрошенный объём памяти. Это типичная проблема, которая проявляется в виде сообщения «Ошибочный запрос: нехватка памяти» или автоматического завершения процесса kill-ом oom-killer.
Причины возникновения
- Утечка памяти в приложениях – программа постепенно расходует RAM, не освобождая её.
- Слишком много бесполезных процессов – запущенные фоновые сервисы, браузеры с множеством вкладок, большие базы данных.
- Недостаточный объём подкачки – система не может вытеснить неактивные страницы на диск.
- Лимиты ядерных ресурсов – процессам ограничен объём выделяемой памяти (
ulimitилиcgroups). - Повреждение файловой системы или раздела – редкая причина, но может привести к невозможности выделения памяти.
Способы решения
Способ 1: Очистите ненужные процессы
- Проверьте текущее состояние памяти
Запустите
free -hи просмотрите строкуMem:. Обратите внимание на столбцыused,freeиavailable. Еслиavailableблизок к нулю, система испытывает дефицит. - Определите «виновные» процессы
Используйте
ps aux --sort=-%mem | head -n 11, чтобы увидеть процессы с наибольшим потреблением памяти. Найдите подозрительные или неиспользуемые процессы. - Завершите ненужные или проблемные процессы
Для процесса с PID
1234выполнитеkill -15 1234. Если процесс не реагирует, используйтеkill -9 1234для принудительного завершения.
Способ 2: Увеличьте объём подкачки
- Настройте подкачку (swap)
Отредактируйте
/etc/fstab, добавив строкуnone /swap swap sw 0 0. Затем выполнитеswapon -s. Либо временно создайте файл подкачки командойfallocate -l 2G /swapfile, отредактируйте/etc/fstab, добавив/swapfile none swap sw 0 0, отмонтируйте его (mount /swapfile) и активируйте (swapon /swapfile).
Способ 3: Установите лимиты на память
- Установите лимиты на память для пользователей/процессов
Редактором
/etc/security/limits.confдобавьте строкиusername soft memlock unlimitedиusername hard memlock unlimited. Перезагрузите сессию или выполнитеulimit -l unlimited.
Способ 4: Оптимизируйте системы и используйте инструменты мониторинга
- Установите
htopилиglancesдля удобного визуального мониторинга. - Проверьте журналы (
dmesg | grep -i oomили/var/log/syslog) для выявления повторяющихся ошибок. - Обновите систему (
apt upgrade/yum update), чтобы устранить известные баги, связанные с памятью.
Способ 5: Исправьте утечку памяти в приложениях
- Переустановите проблемное ПО или используйте более новую версию.
- Запустите приложение с помощью
straceилиvalgrind, чтобы выявить утечку. - Обратитесь к разработчикам с логами, содержащимыми
malloc/free.
Профилактика
- Регулярно перезагружайте систему, особенно если используется много ресурсов.
- Следите за размером подкачки – поддерживайте его на уровне 1–2 × RAM для активных рабочих нагрузок.
- Используйте автоматические инструменты очистки (например,
preload,zram) для снижения нагрузки. - Настройте
cgroupsдля контейнеров или виртуальных машин, чтобы ограничить потребление памяти. - Обновляйте драйверы и ядро, так как новые релизы часто содержат улучшения работы с памятью.