Запуск будь-якої команди повертає "Неможливо розподілити пам'ять" на Ubuntu Server


16

Я використовую 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

Відповіді:


12

Рішення

Як говориться в повідомленнях про помилки, у вашої машини не вистачило пам'яті. Це може бути з кількох причин, але в основному щось з’їдає всю вашу пам’ять і не залишає нічого для навіть базового використання команд.

Я б запропонував вам перезавантажити крапельку (просто перейдіть на панель керування клієнта та виберіть "Перезавантажити"), sshа потім запустіть topабо htop. Слідкуйте за використанням пам'яті і подивіться, який процес використовує всю пам'ять. Звідти спробуйте будь-яке

  1. Вбивство / видалення несправної програми / процесу

    ПОПЕРЕДЖЕННЯ : Спершу, будь ласка, проаналізуйте, чи процес є важливим системним процесом! Якщо системний процес спричиняє проблеми з пам’яттю, не просто вбивайте його, не досліджуйте його та конкретні способи вирішення проблеми.
  2. Зміна конфігурації для цієї програми / процесу, щоб вона не з'їла всю вашу пам'ять.

Пропозиції щодо запобігання повторенню проблеми

  • Щось добре зробити - це додати пам’ять свопу , оскільки вона виділяє більше пам’яті, якщо у вас закінчується.
  • Кожного разу, коли ви встановлюєте програми, переконайтеся, що ви правильно їх налаштували, щоб вони не працювали ненавмисно (наприклад, поїдання пам'яті)
  • Після кожного додавання пакету чи налаштування будь-якого нового, перевірте, htopчи topпотрібно пам’яті використовувати для поточних програм. Якщо ви помітили, що ви використовуєте майже все це, спробуйте очистити їх, переглянувши та видаливши непотрібні програми / процеси.
  • Якщо є щось, що автоматично запускається (окрім системних процесів, звичайно!), Що ви не розпізнаєте або не хочете його автоматично запустити, видаліть його! Але завжди займайтеся дослідженням того, що таке процес, перш ніж вбивати / видаляти його, оскільки це може бути важливим для процедур завантаження або функцій системи тощо.

7

Щоб вийти з цього стану без перезавантаження, ви можете запустити вбивцю OOM вручну таким чином:

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

Довідково


Чи є у вас документація, що підтримує ці команди? Чому б не просто sudo sysctl -w vm.oom_kill_allocating_task=1чи постійно постійно/etc/sysctl.conf .
Пабло Біанкі

1
Не здається, що це мало б значення, система не потрапляє на фактичну умову OOM, якщо це відбувається в спокої, тому що жоден процес не намагається виділити пам'ять і ніякі додаткові процеси не можуть бути запущені. І напівспоріднене, але ви не зможете використати sudo або sysctl один раз у цьому стані.
Лука F

Це працювало для мене. Не знаю як, байдуже. Я навіть не міг бігати, sudo rebootперш ніж запустити це. Спасибі!
boulder_ruby

0

На завершення до прийнятої відповіді є ще одне, що слід врахувати: у вашій системі може не вистачати ручок файлів або навіть буферів сокет і все-таки багато пам’яті, одночасно даючи ту саму помилку. Це особливо актуально, якщо спільний хостинг накладає обмеження такого характеру. У системах OpenVZ дивіться вміст

# cat / proc / user_beancounters

Це дасть вам у правому стовпчику перше перевищення. Якщо це правда, або перейдіть до більшого пакету хостингу, або відшукуйте найімовірнішого винуватця: базу даних mysql або mariadb, яка за наявності несправного додатка PHP може витік файлів, що обробляє сотні, в секунду.

Це також може статися, якщо ваш веб-сервер відкрив ssh для Інтернету і приймає логіни користувача / пароля: навіть якщо у вас не працює22, ви, можливо, залучили розповсюджений словник у спробі, який також забирає багато ресурсів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.