Wie gehen Sie mit nicht reagierenden Browserskripten um?

Wie gehen Sie mit nicht reagierenden Browserskripten um?

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:Bildbeschreibung hier eingeben

und hier ist, was ich bekomme, wenn ich nach CPU-Auslastung sortiere:Bildbeschreibung hier eingeben

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:Bildbeschreibung hier eingeben

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:

Google Chrome Task-Manager

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?

verwandte Informationen