Выполнение любых возвратов команды “Не может выделить память” на Сервере Ubuntu

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

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

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

Править: На ответ/предложение, данный здесь, вывод "свободных"

myuser@mymachine:~$ free
-bash: fork: Cannot allocate memory
20
задан 23 February 2018 в 22:37

3 ответа

Решение

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

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

  1. Убить / удалить неисправную программу / процесс

    ПРЕДУПРЕЖДЕНИЕ : ПОЖАЛУЙСТА, сначала исследуйте, является ли процесс важным системным процессом! Если системный процесс вызывает проблемы с памятью, не просто убивайте его, исследуйте его и найдите конкретные способы борьбы с ним.
  2. Изменение конфигурации для этой программы / процесса, чтобы он не поглощал все ваши память.

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

  • Рекомендуется добавить память подкачки , поскольку она выделяет больше памяти, если у вас заканчивается.
  • Каждый раз при установке программы, убедитесь, что вы настроили их правильно, чтобы они не работали непреднамеренно (например, занимали память)
  • После каждого добавления пакета или настройки чего-то нового, проверьте с помощью htop или top , чтобы узнать, сколько памяти вы используете для текущих программ. Если вы заметили, что используете почти все, попробуйте очистить некоторые, пройдя и удалив ненужные программы / процессы.
  • Если есть что-то, что запускается автоматически (кроме системных процессов, конечно!), вы не узнаете или не хотите, чтобы запускался автоматический, удалите его! Но всегда изучайте, что такое процесс, прежде чем его убить / удалить, так как он может быть важен для процедур загрузки или системных функций и т. Д.
15
ответ дан 23 November 2019 в 02:46

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

# cat / proc / user_beancounters

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

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

1
ответ дан 23 November 2019 в 02:46

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

echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger
echo 0 > /proc/sys/kernel/sysrq

Ссылка

11
ответ дан 23 November 2019 в 02:46

Другие вопросы по тегам:

Похожие вопросы: