Lançar o Chrome com GPU num servidor Linux
Por omissão, o Chrome em modo headless não usa a GPU, mesmo quando o servidor tem uma. Renderiza o WebGL com o SwiftShader, uma GPU emulada na CPU: lento, e ocupa os núcleos de que os seus testes precisam. Bastam duas opções para mudar isso.
Testado a 29/10/2026 num servidor Linux GPU (Intel UHD 770, Debian 13, 4 vCPU) com Chromium 156, e Playwright 1.64 em Docker.
1. Pré-requisitos
apt install chromium # ou google-chrome-stable: mesmas opções
ls /dev/dri # deve mostrar renderD128
Com um utilizador não-root, adicione-o ao grupo render para que possa
abrir a GPU: usermod -aG render,video meuutilizador.
2. O comando
chromium --headless=new \
--use-angle=vulkan \
--ignore-gpu-blocklist \
https://example.com
--use-angle=vulkan: o Chrome renderiza via Vulkan na GPU. Alternativa:--use-gl=angle --use-angle=gl-egl(OpenGL ES via EGL), igualmente rápida;--ignore-gpu-blocklist: sem ecrã, o Chrome considera muitas vezes a GPU «pouco fiável» e recua para a CPU. Esta opção impede-o;- como root (caso comum num servidor ou em Docker), acrescente
--no-sandbox.
Estas opções também funcionam sob Xvfb, se a sua ferramenta precisar de um display X real (veja o nosso guia Xvfb).
3. Verificar que a GPU está a ser usada
O chrome://gpu não é prático sem ecrã. Este pequeno ficheiro mostra o
motor de renderização WebGL:
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) : 'SEM WEBGL');
</script>
EOF
chromium --headless=new --use-angle=vulkan --ignore-gpu-blocklist \
--no-sandbox --dump-dom file:///tmp/gl.html
Resultado esperado: ANGLE (Intel, Vulkan … Intel(R) UHD Graphics 770 …).
Se vir SwiftShader, a GPU não está a ser usada.
4. O ganho, medido
Mesma página WebGL (shader em ecrã inteiro a 1920×1080), imagens por segundo:
| Configuração | Renderização | Imagens/s |
|---|---|---|
--headless=new (por omissão) | SwiftShader, CPU | 13 |
--use-angle=vulkan | UHD 770 | ~260 |
--use-gl=angle --use-angle=gl-egl | UHD 770 | ~230 |
Medição feita sem limite de taxa de imagens (--disable-gpu-vsync --disable-frame-rate-limit), 10 renderizações em ecrã inteiro por frame,
leitura de um píxel a cada frame para garantir que a renderização aconteceu
mesmo. Durante este teste, o SwiftShader ocupa 3,9 vCPU de 4; a GPU, 0,6 vCPU.
O script é público: webgl-bench.html. Em uso
normal, o Chrome fixa-se nas 60 imagens/s, que a GPU aguenta sem esforço.
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. Em Docker
Armadilha frequente: a imagem oficial do Playwright não contém o driver
Vulkan da Intel. Mesmo com as opções certas e /dev/dri montado, o Chrome
volta a cair no SwiftShader (verificado com Playwright 1.64). Acrescente o
driver:
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/*
Depois dê a GPU ao contentor:
docker run --device /dev/dri \
--group-add "$(stat -c %g /dev/dri/renderD128)" \
-e ANV_SPARSE=0 \
minha-imagem-playwright npx playwright test
ANV_SPARSE=0 desativa uma funcionalidade Vulkan («sparse») que provoca
bloqueios da GPU com o driver Mesa da Intel numa VM. As nossas VM já a
desativam; um contentor tem o seu próprio ambiente, por isso é preciso
voltar a passá-la.
Perguntas frequentes
E o --disable-gpu que vejo em todo o lado?
É o contrário do que quer: retire-o.
É preciso --enable-features=Vulkan?
Não, --use-angle=vulkan basta com as versões recentes do Chrome.
WebGPU? Fora do âmbito deste guia: as opções acima cobrem WebGL, Canvas e a composição da página.
Experimentar
Os servidores Linux GPU têm uma GPU Intel UHD 770 na VM, com Mesa e Vulkan já instalados. A partir de 14,99 € s/ IVA/mês, acesso root, IPv6 dedicado, opção cluster k3s para paralelizar os seus testes.