Chrome met de GPU draaien op een Linux-server
Standaard gebruikt Chrome in headless-modus de GPU niet, ook niet als de server er een heeft. Het rendert WebGL met SwiftShader, een op de CPU geëmuleerde GPU: traag, en het bezet de cores die je tests nodig hebben. Twee opties zijn genoeg om dat te veranderen.
Getest op 29/10/2026 op een Linux GPU-server (Intel UHD 770, Debian 13, 4 vCPU) met Chromium 156, en Playwright 1.64 in Docker.
1. Vereisten
apt install chromium # of google-chrome-stable: dezelfde opties
ls /dev/dri # moet renderD128 tonen
Als niet-root-gebruiker voeg je die toe aan de groep render, zodat hij de GPU
kan openen: usermod -aG render,video mijngebruiker.
2. Het commando
chromium --headless=new \
--use-angle=vulkan \
--ignore-gpu-blocklist \
https://example.com
--use-angle=vulkan: Chrome rendert via Vulkan op de GPU. Alternatief:--use-gl=angle --use-angle=gl-egl(OpenGL ES via EGL), even snel;--ignore-gpu-blocklist: zonder scherm beschouwt Chrome de GPU vaak als “onbetrouwbaar” en valt het terug op de CPU. Deze optie voorkomt dat;- als root (gebruikelijk op een server of in Docker) voeg je
--no-sandboxtoe.
Deze opties werken ook onder Xvfb, als je tool een echt X-display nodig heeft (zie onze Xvfb-gids).
3. Controleren of de GPU gebruikt wordt
chrome://gpu is niet handig zonder scherm. Dit kleine bestand toont de
WebGL-renderer:
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) : 'GEEN WEBGL');
</script>
EOF
chromium --headless=new --use-angle=vulkan --ignore-gpu-blocklist \
--no-sandbox --dump-dom file:///tmp/gl.html
Verwacht resultaat: ANGLE (Intel, Vulkan … Intel(R) UHD Graphics 770 …).
Zie je SwiftShader, dan wordt de GPU niet gebruikt.
4. De winst, gemeten
Dezelfde WebGL-pagina (fullscreen-shader in 1920×1080), beelden per seconde:
| Configuratie | Rendering | Beelden/s |
|---|---|---|
--headless=new (standaard) | SwiftShader, CPU | 13 |
--use-angle=vulkan | UHD 770 | ~260 |
--use-gl=angle --use-angle=gl-egl | UHD 770 | ~230 |
Gemeten zonder framerate-limiet (--disable-gpu-vsync --disable-frame-rate-limit), 10 fullscreen-renders per frame, met het
uitlezen van één pixel per frame om te garanderen dat het renderen echt heeft
plaatsgevonden. Tijdens deze test bezet SwiftShader 3,9 van de 4 vCPU’s; de
GPU 0,6 vCPU. Het script is openbaar: webgl-bench.html.
Bij normaal gebruik houdt Chrome 60 beelden/s aan, wat de GPU moeiteloos haalt.
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
Veelvoorkomende valkuil: de officiële Playwright-image bevat de Intel
Vulkan-driver niet. Zelfs met de juiste opties en /dev/dri gemount valt
Chrome daar terug op SwiftShader (gecontroleerd met Playwright 1.64). Voeg de
driver toe:
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/*
Geef daarna de GPU aan de container:
docker run --device /dev/dri \
--group-add "$(stat -c %g /dev/dri/renderD128)" \
-e ANV_SPARSE=0 \
mijn-playwright-image npx playwright test
ANV_SPARSE=0 schakelt een Vulkan-functie (“sparse”) uit die met de Intel
Mesa-driver in een VM GPU-blokkades veroorzaakt. Onze VM’s schakelen die al
uit; een container heeft zijn eigen omgeving, dus je moet de variabele daar
opnieuw meegeven.
Veelgestelde vragen
En die --disable-gpu die ik overal zie?
Dat is het tegenovergestelde van wat je wilt: weghalen.
Heb ik --enable-features=Vulkan nodig?
Nee, --use-angle=vulkan volstaat met recente versies van Chrome.
WebGPU? Valt buiten deze gids: de opties hierboven dekken WebGL, Canvas en de paginacompositie.
Probeer het
Linux GPU-servers hebben een Intel UHD 770-GPU in de VM, met Mesa en Vulkan al geïnstalleerd. Vanaf €14,99 excl. btw/mnd, root-toegang, eigen IPv6-adres, optioneel k3s-cluster om je tests te parallelliseren.