Quantos utilizadores simultâneos aguenta um VPS: fazer as contas

Tudo começa por uma pergunta: o que fazem esses utilizadores? Mil pessoas ligadas a uma aplicação não fazem mil pedidos por segundo, e uma página servida a partir de uma cache custa cem vezes menos do que uma página calculada. Este guia traduz utilizadores em pedidos, pedidos em processador e memória, e mostra como o verificar com um teste de carga.

Publicado a 26 de outubro de 2026 Por Leitura: 9 minutos

Todos os guias

O essencial

  1. Utilizadores ligados não são pedidos simultâneos: um utilizador ativo envia um pedido a cada 10 a 30 segundos, aproximadamente.
  2. Pedidos em curso = pedidos por segundo × duração de um pedido (lei de Little). É este o número que o servidor tem de aguentar.
  3. Um vCPU serve no máximo 1 000 ÷ (milissegundos de cálculo por pedido) pedidos por segundo: 20 ms de cálculo, 50 pedidos por segundo.
  4. A memória limita o número de workers: cada processo PHP ou Python ocupa 40 a 200 MB.
  5. A cache muda tudo: uma página servida a partir de uma cache custa menos de um milissegundo, uma página WordPress calculada 100 a 300.
  6. Meça com um teste de carga (k6, wrk) numa cópia da aplicação, subindo por patamares.

Dos utilizadores aos pedidos

«Utilizadores simultâneos» designa três grandezas diferentes, conforme quem fala:

Passa-se de uma para a outra pela lei de Little: o número de pedidos em curso é igual ao débito, em pedidos por segundo, multiplicado pela duração média de um pedido.

Exemplo. 600 utilizadores ativos ao mesmo tempo, cada um a desencadear um pedido a cada 20 segundos, fazem 30 pedidos por segundo. Se cada pedido durar 100 ms, o servidor tem apenas 3 pedidos em curso em média. O desafio está noutro lado: nos picos e nos pedidos lentos.

O que aguenta um vCPU

Um pedido ocupa o processador durante o seu cálculo: executar o código, consultar a base de dados, construir a resposta. Um vCPU trata portanto no máximo 1 000 ÷ t pedidos por segundo, em que t é o tempo de cálculo de um pedido em milissegundos. O tempo passado à espera (uma API externa, um disco) não ocupa o processador, mas ocupa um worker.

Tipo de pedidoTempo de cálculo típicoPor vCPU, ordem de grandeza
Ficheiro estático, ou página servida a partir de uma cacheMenos de 1 msVários milhares de pedidos por segundo
Página WordPress servida por uma cache de páginas1 a 5 msVárias centenas por segundo
API JSON (Node.js, Go, FastAPI) com uma consulta SQL indexada5 a 20 ms50 a 200 por segundo
Página WordPress ou Laravel calculada a cada visita100 a 300 ms3 a 10 por segundo
Relatório, exportação, geração de PDF500 ms a vários segundosMenos de 2 por segundo

Com estas ordens de grandeza, 30 pedidos de API por segundo com 10 ms de cálculo ocupam 30 % de um único vCPU. Os mesmos 30 pedidos por segundo em páginas WordPress sem cache pedem 3 a 9 vCPU. A cache de páginas serve precisamente para fazer passar uma página da quarta linha da tabela para a segunda.

O que aguenta a memória

Cada pedido em curso é tratado por um worker, e os workers ocupam memória, quer estejam a trabalhar quer não. É muitas vezes a memória, mais do que o processador, que define o número de pedidos tratados em paralelo:

As ligações persistentes (websockets, notificações em tempo real) contam-se à parte: abertas em permanência, ocupam pouco processador e algumas dezenas de kilobytes de memória cada. Um servidor Node.js aguenta milhares delas em algumas centenas de MB.

Os verdadeiros estrangulamentos

Numa aplicação real, o servidor raramente satura onde se espera. As causas mais frequentes, pela ordem em que as procurar:

  1. Uma consulta SQL lenta: um índice em falta transforma uma consulta de 2 ms numa consulta de 2 segundos, que retém um worker e uma ligação. O pg_stat_statements no PostgreSQL, ou o registo de consultas lentas do MySQL, identifica-a.
  2. As consultas em cascata (o problema N+1): uma página que lança uma consulta por cada linha apresentada lança centenas delas.
  3. Uma chamada externa síncrona: uma API de pagamento ou de IA que responde em 3 segundos bloqueia um worker síncrono durante 3 segundos.
  4. Processamentos pesados dentro do pedido: envio de e-mails, redimensionamento de imagens, geração de PDF, a passar para uma fila de tarefas.
  5. A ausência de cache: as páginas iguais para todos os visitantes servem-se a partir de uma cache, os ficheiros estáticos a partir do servidor web.

Verificar: o teste de carga

As ordens de grandeza dão um primeiro tamanho; um teste de carga dá o verdadeiro. O princípio: simular utilizadores cada vez mais numerosos numa cópia da aplicação, e registar o momento em que o tempo de resposta dispara.

Terminal: 50 ligações durante 30 segundos, com o wrk
wrk -t2 -c50 -d30s --latency https://preprod.o-seu-site.com/

Para um percurso completo (início de sessão, navegação, pesquisa), o k6 descreve um cenário em JavaScript e faz subir a carga por patamares:

Script k6 (test.js), lançado com: k6 run test.js
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 100 },
    { duration: '2m', target: 300 },
    { duration: '5m', target: 300 },
    { duration: '2m', target: 0 },
  ],
  thresholds: { http_req_duration: ['p(95)<500'] },
};

export default function () {
  http.get('https://preprod.o-seu-site.com/');
  sleep(15);
}

Quando a carga aumenta

A ordem que custa menos e rende mais:

  1. Pôr em cache o que pode sê-lo (páginas, fragmentos, resultados de consultas) e corrigir as consultas lentas.
  2. Ajustar o número de workers à memória e ao processador disponíveis.
  3. Passar a um tamanho superior: mais vCPU e mais memória, sem mudar nada na aplicação.
  4. Colocar a base de dados no seu próprio servidor.
  5. Distribuir a aplicação por vários servidores atrás de um balanceador de carga.

As três primeiras etapas cobrem a grande maioria das aplicações de gestão, dos sites e das API: várias centenas de utilizadores ativos ao mesmo tempo cabem num único servidor bem ajustado.

Um servidor que cresce com os seus utilizadores

O VPS Pro está disponível em seis tamanhos, com processadores Intel Xeon, memória ECC e SSD NVMe em espelho, e passa ao tamanho superior a qualquer momento, sem reinstalação. A Assistência integral está incluída: diga-nos quantos utilizadores espera no lançamento e daqui a um ano, e aconselhamos-lhe o tamanho; e quando uma página abranda, diagnosticamos e indicamos-lhe o que fazer, do sistema até ao código da sua aplicação.

Descobrir o VPS Pro

Perguntas frequentes

Quantos utilizadores aguenta um VPS de 2 vCPU e 4 GB?

Para uma API ou uma aplicação cujos pedidos levam 10 a 20 ms de cálculo, várias centenas de utilizadores ativos ao mesmo tempo. Para um site WordPress sem cache de páginas, cerca de uma centena. A diferença está no tempo de cálculo de cada pedido e na cache, daí o interesse de um teste de carga.

Quantos visitantes por dia pode receber um VPS?

O número de visitantes por dia diz pouco: o que conta é o pico. Para passar de um para o outro, divida as visitas do dia pelas horas de atividade, multiplique pelas páginas vistas por visita, e depois por um fator de ponta de 3 a 5. 10 000 visitas em 10 horas, com 4 páginas cada, dão cerca de 1 página por segundo em média, e 3 a 5 no pico.

Como saber se o meu servidor está saturado?

Três sinais: o tempo de resposta sobe com o tráfego, o processador fica acima de 80 % nas horas de ponta, ou a memória disponível desce para perto de zero. Os registos do servidor web mostram então erros 502 ou 504, e os pedidos esperam por um worker livre.

Os websockets mudam o cálculo?

Sim: uma ligação websocket fica aberta em permanência. Consome pouco processador e algumas dezenas de kilobytes de memória. Um servidor Node.js aguenta milhares delas; são as mensagens enviadas, mais do que as ligações abertas, que carregam o processador.

Contacte-nos