GNOME Memory Leak Debugging: Wenn dein Desktop 4GB RAM frisst

4,3 GB. So viel RAM fraß mein gnome-shell Prozess, als ich ihn auf frischer Tat ertappte.

Oder: Wie ich lernte, meine GPU nicht mehr zu beschuldigen und System-Logs zu lieben

Kennste das? Dein GNOME-Desktop wird über ein paar Tage immer langsamer. Fenster-Animationen ruckeln. Die Übersicht braucht ewig zum Öffnen. Fenster ziehen fühlt sich an wie Möbel durch Honig schieben. Der offensichtliche Verdächtige? Meine NVIDIA RTX 3080 Ti, die drei hochauflösende Monitore mit zusammen 47,5 Megapixeln befeuert.

Ich lag falsch. Spektakulär falsch.

Das Setup (AKA: Die Overkill-Workstation)

Bevor wir loslegen, hier mein Setup:

  • System: Ubuntu 22.04, GNOME auf X11
  • CPU: Intel i7/i9 (16 Kerne)
  • RAM: 64 GB
  • GPU: NVIDIA RTX 3080 Ti
  • Displays: 3 Monitore (2× 2560×1600 @ 200% Scaling, 1× 4K @ ~133% Scaling)

Diese Maschine sollte GNOME wie Butter verarbeiten. Stattdessen fühlte es sich nach ein, zwei Tagen Uptime an, als würde ich einen Felsbrocken bergauf schieben.

Die üblichen Verdächtigen

Wenn dein Linux-Desktop mit einer NVIDIA-GPU laggt, wo schaust du zuerst? Bei der GPU, logisch.

nvidia-smi && dpkg -l | grep nvidia-driver && ubuntu-drivers devices

Ergebnis: Treiber 580.95.05 (empfohlen), CUDA 13.0, GPU läuft stabil bei 71°C, ~10 GB VRAM belegt. Nix Auffälliges.

Was ist mit der Display-Konfiguration? Vielleicht stimmt was nicht mit meinem Multi-Monitor-Setup:

xrandr --query | grep -E "connected|[0-9]+x[0-9]+\*"
DP-0 connected 5120x3200+10240+0
DP-2 connected 5120x3200+0+0
DP-4 connected primary 5120x2880+5120+0

Drei Displays mit hoher Auflösung. Ja, das sind 47,5 Megapixel insgesamt. Ja, Xorg nutzte 6 GB VRAM. Aber das ist normal für dieses Setup—die GPU war nicht das Problem.

Die Ermittlung: Den Brotkrumen folgen

Zeit, in die System-Logs zu schauen. Zuerst musste ich finden, wo die aktuelle Boot-Session begann:

grep -n "kernel.*Linux version" /var/log/syslog

Dann suchte ich nach allem GPU-bezogenen, Display-bezogenen oder Fehler-bezogenen seit dem Boot:

tail -n +<BOOT_LINE> /var/log/syslog | grep -iE "nvidia|gpu|gnome-shell|mutter|Xorg|freeze|hung|timeout|failed|error|OOM|segfault|NVRM" | head -100

Keine NVIDIA Xid-Errors. Keine OOM-Events. Keine Memory-Pressure-Warnungen. GPU und RAM machten ihren Job.

Aber Moment—was ist das für ein Rauschen von gnome-shell?

Der rauchende Colt: 660+ JavaScript-Fehler

Ich filterte gezielt nach GNOME Shell JavaScript-Fehlern:

tail -n +<BOOT_LINE> /var/log/syslog | grep -iE "gnome-shell.*error|js error" | head -50

Und da war es. Seite um Seite von:

Dec  1 02:01:33 mb-desktop gnome-shell[7597]: JS ERROR: TypeError: this._bgManager is null
    after__init/<@/home/mb/.local/share/gnome-shell/extensions/vertical-overview@RensAlthuis.github.com/workspaceThumbnail.js:276:13
    _destroyThumbnails@resource:///org/gnome/shell/ui/workspaceThumbnail.js:981:33

Und dieser Kracher, 15 Mal in schneller Folge wiederholt:

Dec  1 02:01:40 mb-desktop gnome-shell[7597]: message repeated 15 times: [ JS ERROR: TypeError: this._bgManager is null... ]

Ich gruppierte und zählte die Fehler:

tail -n +<BOOT_LINE> /var/log/syslog | grep -E "gnome-shell\[7597\].*JS ERROR" | cut -d']' -f2- | sort | uniq -c | sort -rn | head -20
Extension Fehleranzahl Fehlertyp
vertical-overview 660+ TypeError: this._bgManager is null
dash-to-panel ~400 Konflikte mit vertical-overview
ubuntu-dock 14 Impossible to enumerate trash children
another-window-session-manager 6+ GTop fehlt, Save-Fehler

Der Schuldige: Jedes Mal wenn ich Super drückte um die Übersicht zu öffnen, warf die vertical-overview Extension 16-24 JavaScript-Fehler. Über zwei Tage normaler Nutzung summierten sich das auf 660+ Fehler—und offenbar eine ganze Menge geleakten Speicher.

Die Beweislage: Memory-Analyse

Jetzt wusste ich was passierte. Zeit zu beweisen, wie schlimm es war:

ps -C gnome-shell -o rss --no-headers | awk '{sum+=$1} END {print sum/1024 " MB"}'

Ausgabe: 4271 MB

Das sind 4,3 GB RAM allein für gnome-shell. Normalerweise sollten es 400-800 MB sein.

Ein Blick in die volle Prozessliste:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mb        7597  3.6  6.5 11176396 4271296 ?    Rsl  Dec01  99:27 /usr/bin/gnome-shell

Läuft seit dem 1. Dezember, verbraucht 6,5% meiner 64 GB RAM, und hat 99 Minuten CPU-Zeit angesammelt—nur für gnome-shell.

Der Fix: Ein Befehl, sie alle zu knechten

Jetzt wird’s befriedigend. Du denkst vielleicht, Alt+F2 drücken, r eintippen und Enter wäre die Lösung. Das ist der klassische GNOME Shell Neustart-Trick.

Nope. Das ist ein “Soft Restart”, der den geleakten Speicher nicht wirklich freigibt.

Der echte Fix:

killall -3 gnome-shell

Das sendet SIGQUIT an gnome-shell, was einen Core-Dump auslöst und einen echten Neustart erzwingt. Deine laufenden Anwendungen bleiben offen, aber gnome-shell startet frisch.

Nach dem Neustart:

ps -C gnome-shell -o rss --no-headers | awk '{sum+=$1} END {print sum/1024 " MB"}'

Ausgabe: 784 MB

3,5 GB sofort freigegeben. Der Desktop war wieder flüssig.

Was ich auf die harte Tour gelernt habe

1. Alt+F2 → r fixt keine Memory Leaks

Der GNOME Shell “Restart”-Befehl (r) ist eher ein Refresh. Er lädt Extensions und UI-Elemente neu, gibt aber angesammelten Speicher nicht frei. Für echte Memory Leaks brauchst du einen echten Prozess-Neustart.

2. Extension-Kompatibilität ist ein Minenfeld

Die Kombination aus vertical-overview und dash-to-panel war toxisch. Beide Extensions modifizieren, wie die Übersicht und Workspaces funktionieren, und traten sich ständig gegenseitig auf die Füße. Die Fehler kaskadierten jedes Mal, wenn ich die Übersicht öffnete.

3. Verwaiste Extensions sind tickende Zeitbomben

Ein Blick ins vertical-overview GitHub Repository zeigte zahlreiche offene Issues zu Memory Leaks und Kompatibilitätsproblemen mit neueren GNOME-Versionen. Die Extension wird nicht mehr aktiv gepflegt.

4. Deine GPU ist vielleicht nicht das Problem

Wenn du eine fette GPU und hochauflösende Displays hast, ist es leicht, Grafik-Performance-Probleme der GPU in die Schuhe zu schieben. Aber gnome-shell ist eine JavaScript-Anwendung, die auf deiner CPU läuft, und ihre Memory Leaks haben nichts mit deiner Grafikkarte zu tun.

Der Langzeit-Fix

Option A: Problematische Extensions entfernen

gnome-extensions disable vertical-overview@RensAlthuis.github.com
gnome-extensions disable dash-to-panel@jderose9.github.com

Wenn du eine vertikale Übersicht brauchst, such nach aktiv gewarteten Alternativen oder warte, bis GNOME das nativ implementiert.

Option B: Einen Restart-Alias erstellen

Wenn du an deinen Extensions hängst und bereit bist, regelmäßige Wartung zu machen:

# In ~/.bashrc einfügen
alias gnome-restart='killall -3 gnome-shell'

Ausführen, wann immer’s anfängt zu ruckeln. Nicht elegant, aber effektiv.

Option C: Überwachen und warnen

Richte einen simplen Cron-Job ein, der dich warnt, wenn gnome-shell zu gierig wird:

# Jede Stunde prüfen, warnen wenn gnome-shell über 2GB liegt
0 * * * * MEM=$(ps -C gnome-shell -o rss --no-headers | awk '{sum+=$1} END {print sum/1024}'); [ $(echo "$MEM > 2000" | bc) -eq 1 ] && notify-send "gnome-shell nutzt ${MEM}MB"

Diagnose-Befehle Spickzettel

Hier ist alles, was du brauchst, um deine eigenen gnome-shell Probleme zu untersuchen:

# System-Info
nvidia-smi && dpkg -l | grep nvidia-driver
xrandr --query

# Boot-Zeile im Syslog finden
grep -n "kernel.*Linux version" /var/log/syslog

# Nach Fehlern seit Boot suchen
tail -n +<LINE> /var/log/syslog | grep -iE "gnome-shell.*error|js error"

# Fehler gruppieren und zählen
tail -n +<LINE> /var/log/syslog | grep -E "gnome-shell.*JS ERROR" | cut -d']' -f2- | sort | uniq -c | sort -rn | head -20

# gnome-shell Memory-Verbrauch prüfen
ps -C gnome-shell -o rss --no-headers | awk '{sum+=$1} END {print sum/1024 " MB"}'

# Memory-Verbrauch kontinuierlich überwachen
watch -n 5 "ps -C gnome-shell -o rss --no-headers | awk '{sum+=\$1} END {print sum/1024 \" MB\"}'"

# Der Fix
killall -3 gnome-shell

Die Transformation

Vorher Nachher
4,3 GB RAM 784 MB RAM
Ruckelnde Animationen Butterweich
GPU beschuldigt Echten Übeltäter gefunden
Stunden der Verwirrung Ein-Befehl-Fix

Fazit

Wenn dein GNOME-Desktop das nächste Mal zäh wird, greif nicht sofort zu GPU-Treibern oder Display-Einstellungen. Check zuerst deine Extensions. Diese praktischen kleinen Add-ons, die deinen Workflow anpassen, könnten auch langsam dein System auffressen.

Und wenn du vertical-overview nutzt—vielleicht ist es Zeit, Lebewohl zu sagen.

Welche Extensions haben euch schon mal verbrannt? Ich würde gerne eure GNOME-Horrorgeschichten hören.