Blog

Chrome mit GPU auf Linux-Server starten (headless)

Die richtigen Optionen, damit Chrome/Chromium ohne Bildschirm die GPU nutzt: ANGLE Vulkan oder EGL, Playwright, Puppeteer, Selenium, Docker. 20× schneller.

Chrome mit GPU auf einem Linux-Server starten

Standardmäßig nutzt Chrome im Headless-Modus die GPU nicht, selbst wenn der Server eine hat. Es rendert WebGL mit SwiftShader, einer auf der CPU emulierten GPU: langsam, und es belegt die Kerne, die Ihre Tests brauchen. Zwei Optionen genügen, um das zu ändern.

Getestet am 29.10.2026 auf einem Linux-GPU-Server (Intel UHD 770, Debian 13, 4 vCPU) mit Chromium 156 und Playwright 1.64 in Docker.

1. Voraussetzungen

apt install chromium        # oder google-chrome-stable: gleiche Optionen
ls /dev/dri                 # muss renderD128 anzeigen

Als Nicht-Root-Benutzer fügen Sie ihn der Gruppe render hinzu, damit er die GPU öffnen kann: usermod -aG render,video meinbenutzer.

2. Der Befehl

chromium --headless=new \
  --use-angle=vulkan \
  --ignore-gpu-blocklist \
  https://example.com
  • --use-angle=vulkan: Chrome rendert über Vulkan auf der GPU. Alternative: --use-gl=angle --use-angle=gl-egl (OpenGL ES über EGL), ebenso schnell;
  • --ignore-gpu-blocklist: Ohne Bildschirm hält Chrome die GPU oft für „nicht zuverlässig“ und fällt auf die CPU zurück. Diese Option verhindert das;
  • als root (häufig auf einem Server oder in Docker) fügen Sie --no-sandbox hinzu.

Diese Optionen funktionieren auch unter Xvfb, falls Ihr Tool ein echtes X-Display braucht (siehe unsere Xvfb-Anleitung).

3. Prüfen, ob die GPU genutzt wird

chrome://gpu ist ohne Bildschirm unpraktisch. Diese kleine Datei zeigt den WebGL-Renderer an:

cat > /tmp/gl.html <<'EOF'
<script>
const g = document.createElement('canvas').getContext('webgl2');
const e = g && g.getExtension('WEBGL_debug_renderer_info');
document.write(g ? g.getParameter(e.UNMASKED_RENDERER_WEBGL) : 'KEIN WEBGL');
</script>
EOF
chromium --headless=new --use-angle=vulkan --ignore-gpu-blocklist \
  --no-sandbox --dump-dom file:///tmp/gl.html

Erwartetes Ergebnis: ANGLE (Intel, Vulkan … Intel(R) UHD Graphics 770 …). Wenn Sie SwiftShader sehen, wird die GPU nicht genutzt.

4. Der Gewinn, gemessen

Gleiche WebGL-Seite (Vollbild-Shader in 1920×1080), Bilder pro Sekunde:

KonfigurationRenderingBilder/s
--headless=new (Standard)SwiftShader, CPU13
--use-angle=vulkanUHD 770~260
--use-gl=angle --use-angle=gl-eglUHD 770~230

Gemessen ohne Bildratenbegrenzung (--disable-gpu-vsync --disable-frame-rate-limit), 10 Vollbild-Renderings pro Frame, Auslesen eines Pixels in jedem Frame, damit das Rendering garantiert wirklich stattgefunden hat. Während dieses Tests belegt SwiftShader 3,9 von 4 vCPU, die GPU 0,6 vCPU. Das Skript ist öffentlich: webgl-bench.html. Im normalen Betrieb richtet sich Chrome nach 60 Bildern/s, die die GPU mühelos schafft.

5. Playwright

// playwright.config.ts
export default defineConfig({
  use: {
    launchOptions: {
      args: ['--use-angle=vulkan', '--ignore-gpu-blocklist'],
    },
  },
});

6. Puppeteer

const browser = await puppeteer.launch({
  headless: true,
  args: ['--use-angle=vulkan', '--ignore-gpu-blocklist', '--no-sandbox'],
});

7. Selenium (Python)

from selenium import webdriver
o = webdriver.ChromeOptions()
for a in ['--headless=new', '--use-angle=vulkan',
          '--ignore-gpu-blocklist', '--no-sandbox']:
    o.add_argument(a)
driver = webdriver.Chrome(options=o)

8. In Docker

Häufige Falle: Das offizielle Playwright-Image enthält den Intel-Vulkan-Treiber nicht. Selbst mit den richtigen Optionen und eingebundenem /dev/dri fällt Chrome dort auf SwiftShader zurück (geprüft mit Playwright 1.64). Fügen Sie den Treiber hinzu:

FROM mcr.microsoft.com/playwright:v1.64.1-noble
RUN apt-get update && apt-get install -y mesa-vulkan-drivers \
 && rm -rf /var/lib/apt/lists/*

Geben Sie dann dem Container die GPU:

docker run --device /dev/dri \
  --group-add "$(stat -c %g /dev/dri/renderD128)" \
  -e ANV_SPARSE=0 \
  mein-playwright-image npx playwright test

ANV_SPARSE=0 deaktiviert eine Vulkan-Funktion („sparse“), die mit dem Intel-Mesa-Treiber in einer VM GPU-Hänger verursacht. Unsere VMs deaktivieren sie bereits; ein Container hat jedoch seine eigene Umgebung, daher müssen Sie sie dort erneut setzen.

Häufige Fragen

Und das --disable-gpu, das man überall sieht? Das ist das Gegenteil von dem, was Sie wollen: entfernen.

Braucht man --enable-features=Vulkan? Nein, --use-angle=vulkan reicht mit aktuellen Chrome-Versionen.

WebGPU? Nicht Gegenstand dieser Anleitung: Die obigen Optionen decken WebGL, Canvas und das Compositing der Seite ab.

Ausprobieren

Die Linux-GPU-Server haben eine Intel-UHD-770-GPU in der VM, mit bereits installiertem Mesa und Vulkan. Ab 14,99 € netto/Monat, Root-Zugriff, dedizierte IPv6, optionaler k3s-Cluster, um Ihre Tests zu parallelisieren.