Wenn Sie einen Befehl ausführen, wird auf Ubuntu Server die Meldung "Speicher kann nicht zugewiesen werden" zurückgegeben

16

Ich benutze Ubuntu 14.04. Wenn ich mich kürzlich mit meinem Benutzer mit sudo-Berechtigungen über SSH anmelde, führt jeder Befehl, den ich ausführe, zu dem Fehler "Speicher kann nicht zugewiesen werden". Hier sind einige, die ich an meiner Konsole ausprobiert habe

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

Selbst wenn ich versuche sudo reboot now, den obigen Fehler zu erhalten, weiß ich nicht, was ich sonst noch versuchen kann, um meine Instanz zu entsperren. Der Host ist DigitalOcean, wenn das wichtig ist.

Edit: Laut der hier gegebenen Antwort / des Vorschlags ist die Ausgabe von "frei"

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

Antworten:

12

Lösung

Wie in den Fehlermeldungen angegeben, verfügt Ihr Computer nicht über genügend Arbeitsspeicher. Dies kann eine Reihe von Gründen haben, aber im Grunde verbraucht etwas den gesamten Speicher und hinterlässt auch bei der Verwendung grundlegender Befehle keine verbleibenden Informationen.

Ich würde vorschlagen, dass Sie Ihr Droplet neu starten (gehen Sie einfach zu Ihrem Client Control Panel und wählen Sie "Reboot"), sshund führen Sie dann topoder aus htop. Behalten Sie die Speichernutzung im Auge und sehen Sie, welcher Prozess den gesamten Speicher verbraucht. Von dort versuchen Sie entweder

  1. Beenden / Entfernen des fehlerhaften Programms / Prozesses

    WARNUNG : BITTE untersuchen Sie zuerst, ob der Prozess ein wesentlicher Systemprozess ist! Wenn ein Systemprozess Speicherprobleme verursacht, töten Sie ihn nicht nur, sondern recherchieren Sie darüber und suchen Sie nach konkreten Möglichkeiten, damit umzugehen.
  2. Ändern Sie die Konfiguration für dieses Programm / diesen Prozess so, dass nicht der gesamte Speicher belegt wird.

Vorschläge, um zu verhindern, dass das Problem erneut auftritt

  • Etwas Gutes ist es , Swap-Speicher hinzuzufügen , da mehr Speicher zugewiesen wird, wenn Ihnen der Speicher ausgeht.
  • Wenn Sie Programme installieren, stellen Sie sicher, dass Sie sie richtig konfigurieren, damit sie nicht unbeabsichtigt funktionieren (z. B. wenn Sie den Speicher verschlingen).
  • Überprüfen Sie nach jedem Hinzufügen eines Pakets oder nach jeder Neukonfiguration mit htopoder top, wie viel Speicher Sie mit den aktuellen Programmen verbrauchen. Wenn Sie bemerken, dass Sie fast alles verwenden, versuchen Sie, einige zu beseitigen, indem Sie unnötige Programme / Prozesse durchgehen und entfernen.
  • Wenn etwas automatisch gestartet wird (außer natürlich Systemprozessen!), Das Sie nicht erkennen oder nicht automatisch starten möchten, entfernen Sie es! Informieren Sie sich jedoch immer darüber, was ein Prozess ist, bevor Sie ihn beenden / löschen, da er für Startvorgänge, Systemfunktionen usw. von wesentlicher Bedeutung sein kann.
Die ungeraden
quelle
7

Um diesen Zustand ohne Neustart zu beenden , können Sie den OOM-Killer wie folgt manuell auslösen :

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

Referenz

Luke F
quelle
Haben Sie eine Dokumentation, die diese Befehle unterstützt? Warum nicht einfach sudo sysctl -w vm.oom_kill_allocating_task=1oder dauerhaft an/etc/sysctl.conf .
Pablo Bianchi
1
Klingt nicht so, als würde dies einen Unterschied machen. Das System trifft keine tatsächliche OOM-Bedingung, wenn dies im Ruhezustand geschieht, da kein Prozess versucht, Speicher zuzuweisen, und keine zusätzlichen Prozesse gestartet werden können. In diesem Zustand können Sie sudo oder sysctl nur einmal verwenden.
Luke F
Das hat bei mir funktioniert. Weiß nicht wie, ist mir egal. Ich war nicht einmal in der Lage zu rennen, sudo rebootbevor ich das rannte. Vielen Dank!
Boulder_Ruby
0

Um die akzeptierte Antwort zu vervollständigen, muss noch Folgendes beachtet werden: Auf Ihrem System sind möglicherweise keine Datei-Handles oder sogar Socket-Puffer mehr verfügbar, und es ist immer noch viel Speicher vorhanden, während derselbe Fehler ausgegeben wird. Dies gilt insbesondere dann, wenn das Shared Hosting derartige Grenzen setzt. Beobachten Sie auf OpenVZ-Systemen den Inhalt von

# cat / proc / user_beancounters

Dies gibt Ihnen in der äußersten rechten Spalte die ersten Überschreitungen. Wenn dies zutrifft, wechseln Sie entweder zu einem größeren Hosting-Paket oder suchen Sie nach dem wahrscheinlichsten Schuldigen: der mysql- oder mariadb-Datenbank, die möglicherweise bei Vorhandensein einer defekten PHP-App die Dateihandles auf Hunderte pro Sekunde verliert.

Dies kann auch passieren, wenn Ihr Webserver ssh für das Internet geöffnet hat und Benutzernamen / Passwort-Anmeldungen akzeptiert: Selbst wenn fail2ban ausgeführt wird, haben Sie möglicherweise eine Unterbrechung des verteilten Wörterbuchs festgestellt, die ebenfalls viele Ressourcen verbraucht.

aquaherd
quelle