Linux ENOMEMВысокая

Исправляем высокую нагрузку на память в Linux (код ошибки ENOMEM)

Статья расскажет, почему происходит высокая нагрузка на память в Linux, как исправить ошибку ENOMEM и предотвратить её повторение. После прочтения вы сможете быстро оптимизировать использование памяти.

Обновлено 28 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04Debian 12CentOS 8Fedora 38

Что означает ошибка ENOMEM

Ошибка ENOMEM (Not enough memory) возникает, когда ядро Linux не может выделить запрошенный объём памяти. Это типичная проблема, которая проявляется в виде сообщения «Ошибочный запрос: нехватка памяти» или автоматического завершения процесса kill-ом oom-killer.

Причины возникновения

  • Утечка памяти в приложениях – программа постепенно расходует RAM, не освобождая её.
  • Слишком много бесполезных процессов – запущенные фоновые сервисы, браузеры с множеством вкладок, большие базы данных.
  • Недостаточный объём подкачки – система не может вытеснить неактивные страницы на диск.
  • Лимиты ядерных ресурсов – процессам ограничен объём выделяемой памяти (ulimit или cgroups).
  • Повреждение файловой системы или раздела – редкая причина, но может привести к невозможности выделения памяти.

Способы решения

Способ 1: Очистите ненужные процессы

  1. Проверьте текущее состояние памяти Запустите free -h и просмотрите строку Mem:. Обратите внимание на столбцы used, free и available. Если available близок к нулю, система испытывает дефицит.
  2. Определите «виновные» процессы Используйте ps aux --sort=-%mem | head -n 11, чтобы увидеть процессы с наибольшим потреблением памяти. Найдите подозрительные или неиспользуемые процессы.
  3. Завершите ненужные или проблемные процессы Для процесса с PID 1234 выполните kill -15 1234. Если процесс не реагирует, используйте kill -9 1234 для принудительного завершения.

Способ 2: Увеличьте объём подкачки

  1. Настройте подкачку (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: Установите лимиты на память

  1. Установите лимиты на память для пользователей/процессов Редактором /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 для контейнеров или виртуальных машин, чтобы ограничить потребление памяти.
  • Обновляйте драйверы и ядро, так как новые релизы часто содержат улучшения работы с памятью.

Часто задаваемые вопросы

Как понять, что проблема вызвана ошибкой ENOMEM?
Можно ли предотвратить повторное возникновение ошибки?
Что делать, если ошибка возникает после установки нового ПО?
Как быстро проверить объём свободной и использованной памяти?

Полезное

Проверьте текущее состояние памяти
Определите «виновные» процессы
Завершите ненужные или проблемные процессы
Настройте подкачку (swap)
Установите лимиты на память для пользователей/процессов