Soweit ich weiß, sollte der Kernel Prozesse abbrechen, wenn das System fast keinen freien Speicher mehr hat, um Speicher wiederzugewinnen. Aber in meinem System passiert das überhaupt nicht.
Angenommen, ein einfaches Skript weist nur viel mehr Speicher zu als im System verfügbar ist (z. B. ein Array mit Millionen von Zeichenfolgen). Wenn ich ein Skript wie dieses (als normaler Benutzer) ausführe, wird nur der gesamte Speicher abgerufen, bis das System vollständig einfriert (nur SysRQ REISUB funktioniert).
Der seltsame Teil hier ist, dass, wenn der Computer einfriert, die Festplatten-LED aufleuchtet und so bleibt, bis der Computer neu gestartet wird, entweder wenn ich eine Swap-Partition installiert habe oder nicht!
Meine Fragen sind also:
- Ist dieses Verhalten normal? Es ist seltsam, dass eine Anwendung, die als normaler Benutzer ausgeführt wird, das System auf diese Weise zum Absturz bringen kann ...
- Gibt es eine Möglichkeit, Ubuntu dazu zu bringen, diese Anwendungen automatisch zu beenden, wenn sie zu viel (oder den meisten) Speicher haben?
Zusätzliche Information
- Ubuntu 12.04.3
- Kernel 3.5.0-44
RAM: ~ 3,7 GB von 4 GB (gemeinsam mit der Grafikkarte). *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Aber ohne Swap friert der Computer einfach ein. Es soll so funktionieren (nur töten, wenn Swap verwendet wird)?
tail -n+1 /proc/sys/vm/overcommit_*
, die Ausgabe hinzuzufügen. Siehe auch: Wie konfiguriere ich oom-killer