Wenn mein Computer einfriert, lässt sich das Problem normalerweise ganz einfach lösen, indem ich ins Terminal gehe und top ausführe, um herauszufinden, was den Speicher auffrisst und diesen Prozess beendet. Manchmal kann es schwierig sein, wenn er stark eingefroren ist, ich muss CTRL
+ ALT
+ drücken F1
, um ins Terminal zu gelangen. Außerdem ist es praktisch, eine Tastenkombination zum Ausführen von xkill eingerichtet zu haben, damit ich GUI-Apps beenden kann, von denen ich weiß, dass sie ihn einfrieren.
Ich habe noch nicht herausgefunden, wie ich damit umgehen soll, obwohl ich dieses Problem schon seit Jahren habe, nämlich mit diesen nicht reagierenden Browserskripten. Manchmal friert mein Computer so stark ein, dass ich den Mauszeiger nicht mehr bewegen kann. Irgendwann kommt er wieder in Gang und ich sehe, dass in einem der Browser (früher war es immer Firefox, in letzter Zeit ist es Chrome) ein Popup erscheint, das besagt, dass ein JavaScript-Skript nicht reagiert. Ich habe die Möglichkeit, es zu beenden, aber das Drücken der Kill-Taste scheint das Problem nie zu lösen.
Wie gehen Sie mit diesem Problem um? Und wie gehen Sie generell mit Speicherüberlastungsproblemen um? Früher habe ich einfach CTRL
+ ALT
+ gedrückt T
, top ausgeführt und geschaut, welches Programm den meisten Speicher verwendet hat, und es dann beendet, aber das sind viele Schritte, und wenn Ihr Computer eingefroren ist, kann ein einzelner Schritt sehr lange dauern. Daher suche ich nach besseren Möglichkeiten, wie zum Beispiel das Einrichten eines Killswitches, um dies in einem Schritt zu erledigen, oder das Einrichten eines Daemons, der alle Programme beendet, die den Computer einfrieren könnten.
Und wie kann ich am besten herausfinden, welches Programm das Problem verursacht? „top“ ist nicht immer leicht zu sehen, da „top“ manchmal keine Programme anzeigt, die übermäßig viel CPU-Leistung verbrauchen. Wenn ich aber nach unten scrolle, sehe ich, dass etwa 50 Instanzen dieses Programms laufen. Es wäre also viel besser, wenn ich die kombinierte CPU-Auslastung des Programms sehen könnte. Firefox und Chrome sind die beiden Hauptschuldigen, gelegentlich auch Sublime-Text-3 (vielleicht liegt das daran, dass zu viele Tabs geöffnet sind?).
Also habe ich diesen Befehl gefunden:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
Das ergibt im Moment diese Liste:
PID PPID CMD %MEM %CPU
6896 968 /opt/google/chrome/chrome - 13.1 2.7
27334 4769 /usr/lib/firefox/firefox 6.6 13.0
5607 4769 /usr/bin/compiz 4.7 44.7
26381 26363 /usr/lib/libreoffice/progra 2.7 0.0
953 4769 /opt/google/chrome/chrome h 2.0 3.0
2777 2457 /usr/lib/xorg/Xorg -core :0 1.8 29.5
6980 4769 /usr/lib/x86_64-linux-gnu/z 1.6 0.0
8180 8167 mono /usr/lib/AirVPN/AirVPN 1.6 2.1
1096 968 /opt/google/chrome/chrome - 1.4 0.1
Mein Computer ist im Moment nicht eingefroren, also ist alles in Ordnung, aber Firefox selbst friert ein, wenn ich versuche, es zu verwenden. Ich neige dazu, viele Tabs offen zu halten. Ist das der Grund, warum ich so viele Instanzen von Chrome und Firefox sehe, wenn ich top ausführe?
Ich sehe, dass htop viel mehr Optionen bietet als top, also ist es wahrscheinlich ein besseres Tool zur Diagnose des Problems. Es gibt ein paar Dinge, die ich daran nicht verstehe, erstens, was wichtiger ist: %CPU oder %MEM, wenn Ihr Computer regelmäßig einfriert. htop ermöglicht Ihnen die Sortierung nach beiden. Folgendes wird mir angezeigt, wenn ich nach Speichernutzung sortiere:
und hier ist, was ich bekomme, wenn ich nach CPU-Auslastung sortiere:
Wie ich beim Ausführen von PS gesehen habe, beanspruchen Firefox und Chrome den größten Teil des Speichers und Compiz den größten Teil der CPU. Gibt es noch andere wichtige Faktoren, die beim Auftauen Ihres Systems zu berücksichtigen sind? Spielt beispielsweise die Dauer der Ausführung eines Prozesses eine Rolle? Ich sehe, dass Compiz länger als alles andere ausgeführt wurde:
Was einen Killswitch betrifft, habe ich einen gefunden, den jemand anderes geschrieben hat:
while [ 1 ]; do
echo
echo checking for run-away process ...
CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
CPU_USAGE_THRESHOLD=300
PROCESS=$(ps aux r)
TOPPROCESS=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep -v PID | head -n 1)
if [ $CPU_USAGE -gt $CPU_USAGE_THRESHOLD ]; then
kill -9 $(ps -eo pid --sort=-%mem | grep -v PID | head -n 1)
echo "High memory usage process killed $TOPPROCESS\n"
echo "Load average was at $CPU_USAGE\n"
else
echo 'CPU Load Back to Normal'
exit 0
fi
done
Aber ich bin nicht 100% sicher, wie es funktioniert oder was es tut. Wenn ich laufe:
uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g"
Es werden Zahlen wie 149, 179, 178 zurückgegeben. Ich habe das Uptime-Handbuch gelesen und verstehe nicht, wie es dazu beitragen kann, ein Einfrieren des Systems zu verhindern.
Es handelt sich dabei nicht um Prozess-IDs, die ich in einem der von htop angezeigten Top-Speicher mit Apps sehe.
Wenn ich uptime alleine ausführe, erhalte ich Folgendes:
17:49:53 up 1 day, 11:09, 2 users, load average: 3.16, 2.45, 2.03
Mein System ist also seit 17,49 Stunden aktiv. Ich weiß nicht, was die durchschnittliche Auslastung für meinen Computer bedeutet. Mein Bruder hat mir diesen Computer vor kurzem geschenkt, da er einen unbenutzten in seinem Büro hatte. Als ich die Spezifikationen überprüfte:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 26
Model name: Intel(R) Core(TM) i7 CPU 940 @ 2.93GHz
Stepping: 4
CPU MHz: 1867.000
CPU max MHz: 2934.0000
CPU min MHz: 1600.0000
BogoMIPS: 5852.21
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Ich bin ziemlich schockiert, es ist ein Biest, 8 CPUs. Und der RAM:
free -lm
total used free shared buff/cache available
Mem: 12005 7154 311 531 4539 3996
Low: 12005 11694 311
High: 0 0 0
Swap: 30516 1002 29513
12 GB, mein Gott, ich hatte keine Ahnung. Mein alter Laptop hatte 2 GB. Es ist also ein Rätsel, warum es jetzt so einfriert.
Ich frage mich also:
1.) Wie können Sie am besten herausfinden, warum Ihr System langsamer wird und einfriert?
2.) Wie gehen Sie mit dieser speziellen Situation mit dem nicht reagierenden Skript um, ohne den eigentlichen Browser beenden zu müssen? Ich verwende Plugins wie NoScript, aber oft muss ich JavaScript aktivieren. Außerdem verwenden bestimmte Plugins auch Skripte. Warum löst das Beenden dieser Plugins nie etwas? Liegt es daran, dass sie nicht einfach so beendet werden können? Gibt es eine Möglichkeit, ein Skript zu schreiben, das Ihre Browser durchsucht und herausfindet, auf welcher Registerkarte die Seite mit dem nicht reagierenden Skript ausgeführt wird, und das die Registerkarte dann schließt und neu startet? Oder noch besser, einfach das Skript selbst beenden, sodass der Computer wieder ordnungsgemäß ausgeführt werden kann? Ich weiß nicht, warum ein nicht reagierendes Skript mein gesamtes System einfriert. Ich vermute, dass der Browser übermäßig viel Speicher verbraucht, wenn er versucht, das abgestürzte Skript auszuführen.
2.) Was ist der beste Weg, um Ihr System wieder zu aktivieren, insbesondere in den schlimmsten Fällen, wenn Sie den Mauszeiger nicht bewegen können? Wäre eine Tastenkombination in Verbindung mit einem Killswitch die beste Lösung?
3.) Wie würden Sie einen Kill Switch einrichten? Was soll das Skript tun? Soll es herausfinden, welches Programm den meisten Speicher und/oder die meiste CPU-Leistung verbraucht und es beenden? Ich würde einen ausgefeilteren Ansatz bevorzugen, da ich in bestimmten Fällen die App, die den meisten Speicher oder die meiste CPU-Leistung verbraucht, möglicherweise geöffnet halten muss, z. B. wenn ich mit Firefox arbeite und das Beenden zu einem Datenverlust führen kann, den ich gerade schreibe. Ich kann dem Skript eine Liste weniger wichtiger Apps bereitstellen, sodass es diese Liste durchgehen und beurteilen kann, ob sie genug Speicher verbrauchen, sodass es sich lohnt, sie zu beenden.
4.) Würde es helfen, die Größe der SWAP-Partition zu erhöhen?
Antwort1
Ihr Engpass ist alles, was in einem Task-Manager wie ausgelastet erscheint htop
. In diesem Fall scheint es ein RAM-Überlauf mit Chrome-Tabs zu sein. GlücklicherweiseChrome verfügt über einen eigenen Task-ManagerDamit können Sie sehen und beenden, welcher Tab Ihren RAM blockiert:
Chrome-Erweiterungen wieDer große HosenträgerUndFaule Tabshelfen auch, RAM zu sparen.
Wenn Chrome nicht der Übeltäter ist und Sie schnell ein reaktionsfähiges System benötigen, lesen Sie:Beeil dich! Ubuntu hat schnell keinen RAM mehr und mein Computer steht kurz vor dem vollständigen Einfrieren! Welcher Befehl wird mich retten?