Server-Wartung Juni 2026: RAM-Optimierung, Fixes & Updates
Server-Wartung Juni 2026: RAM-Optimierung, Fixes & System-Updates
Inhaltsverzeichnis
Ausgangslage: RAM-Alarm
Beim heutigen Blick auf den Server bot sich ein beunruhigendes Bild: Von 15 GB RAM waren 14,8 GB belegt – und kein einziges Byte Swap konfiguriert. Das bedeutet: Bei einem einzigen größeren Prozess hätte der OOM-Killer wahllos Container abgeschossen.
$ free -h
total used free shared buff/cache available
Mem: 15Gi 14Gi 431Mi 219Mi 1.2Gi 1.1Gi
Swap: 0B 0B 0B
Ein Blick auf die größten RAM-Verbraucher zeigte die Ursachen sofort:
| Container | RAM-Verbrauch | Ursache |
|---|---|---|
webapp |
2,3 GB | Next.js Speicherleck (3 Monate Uptime) |
wazuh-indexer |
2,5 GB | JVM-Heap auf 2 GB gesetzt |
wazuh-manager |
886 MB | SIEM-Manager |
docling |
904 MB | PDF-Verarbeitung (selten benötigt) |
clamd (Mailcow) |
1 GB | ClamAV Virenscanner |
RAM-Optimierung
1. Swap erstellen
Als erstes wurde ein 4 GB Swapfile als Sicherheitsnetz angelegt und dauerhaft in /etc/fstab eingetragen:
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
2. webapp-Speicherleck beheben
Der Next.js-Server des Webauftritts hatte nach drei Monaten ohne Neustart 2,3 GB RAM angehäuft – klassisches V8-Heap-Wachstum ohne obere Grenze. Nach einem Neustart waren es noch 68 MB. Um künftiges unkontrolliertes Wachstum zu verhindern, wurde ein Node.js-Heap-Limit gesetzt:
environment:
NODE_ENV: production
NODE_OPTIONS: "--max-old-space-size=512" # Max 512 MB Heap
3. Wazuh-Indexer JVM-Heap reduzieren
Der OpenSearch-Indexer von Wazuh war mit einem 2 GB JVM-Heap konfiguriert – für eine Single-Node-Installation deutlich mehr als nötig. Die Anpassung auf 1 GB spart knapp 1 GB RAM ohne Funktionseinbußen:
# Vorher
- "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
# Nachher
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
4. Docling deaktivieren
Docling ist ein leistungsstarker PDF-Extraktor, der für n8n-Workflows verwendet wird –
aber nur gelegentlich. Den Dienst dauerhaft laufen zu lassen kostete 904 MB RAM.
Er wurde gestoppt und auf restart: "no" gesetzt, kann bei Bedarf
per docker start docling reaktiviert werden.
depends_on-Abhängigkeit von n8n auf Docling wurde ebenfalls entfernt,
damit n8n beim Serverstart nicht blockiert wird.
Docker Build-Cache bereinigen
Ein weiterer Quick-Win: Der Docker Build-Cache hatte sich auf 4,5 GB angesammelt und wurde vollständig bereinigt:
docker builder prune -f
# Total: 4.538GB freigegeben
Weitere Fixes
Traefik: ForwardAuth-Sicherheitswarnung beheben
Die Traefik-Logs zeigten wiederkehrende Warnungen für alle ForwardAuth-Middlewares (die Authentik-Authentifizierung für interne Dienste):
level=warning msg="maxResponseBodySize is not configured, allowing unlimited
response body size which can lead to DoS attacks and memory exhaustion."
Die Lösung: maxResponseBodySize: 1048576 (1 MB) wurde zu beiden
betroffenen Middlewares hinzugefügt – dockge-auth in der Traefik-Konfigurationsdatei
und umami-auth via Docker-Label.
Prometheus-Retention optimieren
Prometheus war mit einer 90-Tage-Datenhaltung konfiguriert und belegte bereits 7,7 GB Speicher. Für eine Self-Hosted-Umgebung dieser Größe sind 30 Tage völlig ausreichend:
# Vorher
- '--storage.tsdb.retention.time=90d'
# Nachher
- '--storage.tsdb.retention.time=30d'
n8n Storage-Migration vorbereiten
n8n warnte beim Start vor einer Umbennung des Speicherpfads in der kommenden Version 3:
/home/node/.n8n/binaryData → /home/node/.n8n/storage.
Die Migration wurde mit einer Umgebungsvariable aktiviert:
N8N_MIGRATE_FS_STORAGE_PATH: "true"
System- & Container-Updates
System-Pakete (49 Pakete)
| Paket | Alt | Neu |
|---|---|---|
| Docker CE | 29.1.3 | 29.5.3 |
| Docker Compose Plugin | 5.0.0 | 5.1.4 |
| containerd.io | 2.2.1 | 2.2.4 |
| Trivy | 0.68.2 | 0.71.1 |
| Tailscale | 1.92.5 | 1.98.4 |
| Linux Kernel | 6.8.0-90 | 6.8.0-124 |
| + 43 weitere Ubuntu-Pakete | AppArmor, rsyslog, snapd, netplan, openldap … | |
wazuh-agent (4.9.2 → 4.14.5)
wurde bewusst nicht aktualisiert. Agent- und Manager-Version müssen übereinstimmen –
ein Update des Agents ohne gleichzeitiges Update der Manager/Indexer/Dashboard-Container
würde zu einem Versionskonflikt führen.
Kernel-Update & Reboot
Das Kernel-Update von 6.8.0-90 auf 6.8.0-124 erforderte einen Neustart.
Alle Container sind mit restart: unless-stopped konfiguriert und starteten automatisch wieder –
die gesamte Downtime betrug unter 60 Sekunden.
Container-Updates
| Container | Alt | Neu | Hinweis |
|---|---|---|---|
| Authentik SSO | 2024.12 | 2025.6 | ~18 Monate Rückstand aufgeholt |
| Directus CMS | 11.3.3 | 11.17.4 | Migrationen automatisch gelaufen |
| Gitea | 1.22-rootless | 1.23-rootless | Neue Git-Features und Bugfixes |
Die übrigen Container (n8n, Nextcloud, Traefik, Prometheus u.a.) werden durch Watchtower automatisch aktualisiert – zuletzt am 14. Juni 2026 mit 6 Updates.
Ergebnis
| Metrik | Vorher | Nachher |
|---|---|---|
| RAM genutzt | 14,8 GB (97%) | 7,5 GB (49%) |
| Swap | 0 GB | 4 GB aktiv |
| Freier Speicherplatz (Disk) | 47 GB | ~57 GB (+10 GB durch Cache/Retention) |
| Docker Engine | 29.1.3 | 29.5.3 |
| Kernel | 6.8.0-90 | 6.8.0-124 |
| Traefik-Warnungen | Wiederkehrend | Behoben |
- RAM-Nutzung um 7,3 GB reduziert – Server läuft nun mit komfortablem Puffer
- 4 GB Swap als dauerhafte Sicherheitsreserve eingerichtet
- 49 System-Pakete + 3 Container-Versionen aktualisiert
- Kernel-Update mit automatischem Container-Neustart in unter 60 Sekunden
- Sicherheitswarnung in Traefik ForwardAuth behoben
- Authentik von 2024.12 auf 2025.6 gehoben (18 Monate Rückstand)