it-swarm.com.de

So vermeiden Sie zu wenig Arbeitsspeicher, um das System zu hängen

Ich habe auf Ubuntu viele Fragen zum Thema Arbeitsspeicher gesehen, und um ehrlich zu sein, kann ich wirklich nicht verstehen, wie es immer noch möglich ist, mit solchen Problemen zu kämpfen.

Ich habe 8 GB RAM. Ich habe ohne große Unterschiede mit/ohne Tausch experimentiert.

Das Problem ist, dass ich meinen Laptop häufig (bis zu einmal am Tag) neu starten muss, da er vollständig eingefroren ist (Warten hilft nicht). Dies hängt höchstwahrscheinlich mit der Verwendung von RAM in meinen Webbrowsern zusammen. Abgesehen davon läuft auf dem Laptop kein sehr anspruchsvoller Prozess.

Um zu experimentieren/zu reproduzieren:

  • Ich "fülle" mein Gedächtnis mit Python mit einer Endlosschleife, die eine Liste füllt.
  • Ich öffne meinen (Web-) Browser (entweder Chrome/Firefox) mit einer oder mehreren Registerkarten.

Meine Beobachtungen sind:

  • Python kann nicht unendlich viel Speicher zuweisen: Es wird schließlich ein MemoryError ausgelöst.
  • der browser hingegen macht keine angaben darüber und wird in meinem fall das system aufhängen. Ich muss den Laptop dann hart neustarten.

Ich verstehe nicht:

  • warum der Browser immer mehr Speicher zuweisen darf (bis zum allerletzten Bit, wie es scheint)
  • warum hängt das System, anstatt "nur" einen Prozess zu beenden?.

Mir ist bewusst, dass für das Austauschen eine CPU erforderlich ist, sodass das System möglicherweise eine Weile hängen bleibt. Aus diesem Grund habe ich es deaktiviert und dachte, der Kernel würde sich schnell entschließen, einen Prozess abzubrechen.

Ich kann nicht verstehen, wie eine solche grundlegende Verwendung (mit Browsern) ein Problem mit einem neueren Betriebssystem mit 8 GB RAM sein könnte. Muss ich mein System optimieren, um ein zuverlässiges zu haben?

Vielen Dank für alle Ratschläge/Erklärungen/Tricks, die helfen würden.

6
pltrdy

Ich habe ein ähnliches Problem mit einem Speicher-/CPU-Überwachungsskript gelöst und habe einfach alle Prozesse beendet, die länger als t Sekunden mehr als x RAM- oder y-Speicher haben. Das löst nicht das Problem, CPU/Mem für das Betriebssystem zu reservieren, aber es ist eine Problemumgehung, bis Sie eine bessere Antwort finden.

#!/bin/bash

# Kill POS if we're doing stupid shit.
HOG_COUNTER=0
while true; do
    # This is pulling CPU, change the awk column from 9 to something
    # that you want to check against.
    HOG=$(top -b -n 1 | grep pos2 | awk '$9 > 90 {print $1}')
    # If the hog variable is not empty, add some counter info - we don't
    # want to catch periodic spikes, we want to catch consistent offenders.
    if [ ! -z "$HOG" ]; then
        counter_time=$(date)
        HOG_COUNTER=$(expr ${HOG_COUNTER} + 1)
        echo "$counter_time - Found a hog: $HOG - ${HOG_COUNTER} counters." >> high_mem_kill_log
    else
        HOG_COUNTER=0
    fi
    # If we have more than 2 counters (3 or more) then we kill the process
    # that's doing it.
    if [ $HOG_COUNTER -gt 2 ]; then
        kill_time=$(date)
        echo "$kill_time - Found a hog: $HOG.  $HOG_COUNTER counters.  Killing $HOG." >> high_mem_kill_log
        kill $HOG
    fi
    sleep 30s
done
3
bubthegreat