Out-of-Memory-Fehler verursachen zahlreiche Abstürze des Firefox. Das Entwicklerteam umgeht dieses Problem denkbar einfach.
In seinem Hacks-Entwicklungsblog berichtet das Team von Mozilla von einer vergleichsweise simplen Änderung, die zu einer Reduktion der Abstürze des Firefox-Browsers um mehr als 70 Prozent geführt habe. Hierbei handelt es sich häufig um Out-of-Memory-Fehler, die offenbar durch eine Besonderheit des Betriebssystems Windows ausgelöst werden.
Windows erlaubt Anwendungen nicht, mehr Speicherplatz zuzuweisen, als ein Rechner hat. Darüber hinaus muss die Anwendung sich fest an bestimmte Speicherbereiche binden, auch wenn diese nicht mit Daten beschrieben werden. Es handelt sich um sogenannten Commit-Speicher.
In dem Blogbeitrag heißt es: “Als wir anfingen, Abstürze wegen Speichermangels zu analysieren, entdeckten wir, dass viele Benutzer reichlich physischen Speicher hatten – manchmal Gigabytes -, aber keinen Commit-Speicher mehr.”
Warum dies geschieht, kann das Mozilla-Team nicht sagen. Vermutet wird, das der Commit-Space von Grafiktreibern belegt ist, um die Texturen später aus dem VRAM auslagern zu können. Daran können die Firefox-Entwickler nichts ändern, sie haben aber noch einen “Trick im Ärmel”.
Anwendungen mit einem Out-of-Memory-Fehler werden von Windows nicht direkt beendet. Die geplante Speicherzuweisung wird nicht durchgeführt, die Anwendung selbst entscheidet über weiteres Vorgehen. Windows selbst erweitert danach den Swap, so dass es wieder mehr Speicher gibt.
Den Trick beschreibt das Team so: “Wir haben Firefox so eingestellt, dass er eine Weile wartet, anstatt abzustürzen, und dann die fehlgeschlagene Speicherzuweisung erneut versucht. Das führt zwar zu ein paar Ungereimtheiten, da der Browser für den Bruchteil einer Sekunde hängen bleiben kann, das ist aber besser als ein Absturz.”
Das habe außerdem einen weiteren Vorteil. Das Verzögern des Absturzes des Hauptprozesses kann später zum Absturz eines Inhalte- oder des GPU-Prozesses führen. Dank der Multiprozessarchitektur könnten diese aber ohne einen Absturz der gesamten Anwendung neu gestartet werden. Der Prozessabsturz selbst gebe noch Speicher frei. Ähnliches habe das Team zuvor schon erfolgreich für den Browser auf Android umgesetzt.



