Выполнение любой команды возвращает "Не удается выделить память" на сервере Ubuntu

Я использую Ubuntu 14.04. Недавно, когда я вхожу в систему через SSH со своим пользователем с привилегиями sudo, каждая команда, которую я выполняю, приводит к ошибке “Не удается выделить память”. Вот несколько из них, которые я попробовал на своей консоли

myuser@mymachine:~$ whoami-bash: fork: Cannot allocate memorymyuser@mymachine:~$ uname -a-bash: fork: Cannot allocate memory

Даже если я попытаюсь sudo reboot now Я получаю вышеуказанную ошибку, поэтому я не знаю, что еще я могу попытаться разблокировать свой экземпляр. Хост - это DigitalOcean, если это имеет значение.

Редактировать: В соответствии с ответом / предложением, приведенным здесь, вывод "бесплатно"

myuser@mymachine:~$ free-bash: fork: Cannot allocate memory

Решение

Как говорится в сообщениях об ошибках, на вашем компьютере закончилась память. Это может быть по целому ряду причин, но в основном что-то съедает всю вашу память и не оставляет места даже для использования базовых команд.

Я бы посоветовал вам перезагрузить свой droplet (просто перейдите в панель управления вашего клиента и выберите "Перезагрузка"), ssh войти, а затем запустить top или htop. Следите за использованием памяти и посмотрите, какой процесс использует всю память. Оттуда попробуйте либо

  1. Уничтожение/Удаление неисправной программы/процесса

    предупреждение: пожалуйста сначала проведите свое исследование, является ли этот процесс важным системным процессом! Если системный процесс вызывает проблемы с памятью, не просто убивайте его, проведите исследование и найдите конкретные способы борьбы с ним.
  2. Изменение конфигурации для этой программы / процесса, чтобы он не занимал всю вашу память.

Предложения по предотвращению повторения этой проблемы

  • Что-то хорошее, что нужно сделать, это добавить память подкачки, так как он выделяет больше памяти, если у вас ее не хватает.
  • Всякий раз, когда вы устанавливаете программы, убедитесь, что вы правильно их настроили, чтобы они не выполнялись непреднамеренным образом (например, потребляли память).
  • После каждого добавления пакета или настройки чего-либо нового проверяйте с помощью htop или top чтобы увидеть, сколько памяти вы используете с текущими программами. Если вы заметили, что используете почти все из них, попробуйте очистить некоторые, просмотрев и удалив ненужные программы / процессы.
  • Если есть что-то, что запускается автоматически (кроме системных процессов, конечно!), Что вы не распознаете или не хотите запускать автоматически, удалите это! Но всегда проводите исследование того, что представляет собой процесс, прежде чем убивать / удалять его, поскольку это может быть важно для процедур загрузки или системных функций и т.д.

Чтобы выйти из этого состояния без перезагрузки, вы можете запустить Убийца ООМ вручную следующим образом:

echo 1 > /proc/sys/kernel/sysrqecho f > /proc/sysrq-triggerecho 0 > /proc/sys/kernel/sysrq

Ссылка

В дополнение к принятому ответу следует учитывать еще одну вещь: в вашей системе может закончиться дескрипторы файлов или даже буферы сокетов и по-прежнему иметь много памяти, выдавая ту же ошибку. Это особенно верно, если общий хостинг накладывает ограничения такого характера. В системах OpenVZ следите за содержанием

# cat /proc/user_beancounters

Это даст вам в крайнем правом столбце первые перерасходы. Если это так, либо перейдите на более крупный хостинг-пакет, либо найдите наиболее вероятного виновника: базу данных mysql или mariadb, которая при наличии дефектного PHP-приложения может пропускать дескрипторы файлов со скоростью сотни в секунду.

Это также может произойти, если ваш веб-сервер имеет ssh, открытый для Интернета, и принимает логины с именем пользователя / паролем: даже если у вас запущен fail2ban, вы, возможно, привлекли распределенный разрыв словаря при попытке, который также потребляет много ресурсов.