¿Cuántos usuarios simultáneos soporta un VPS? Hacer el cálculo

Todo empieza con una pregunta: ¿qué hacen esos usuarios? Mil personas conectadas a una aplicación no hacen mil peticiones por segundo, y una página servida desde una caché cuesta cien veces menos que una página calculada. Esta guía traduce usuarios en peticiones, peticiones en procesador y memoria, y después muestra cómo verificarlo con una prueba de carga.

Publicado el 26 de octubre de 2026 Por 9 minutos de lectura

Todas las guías

Lo esencial

  1. Usuarios conectados y peticiones simultáneas son dos cosas distintas: un usuario activo envía una petición cada 10 a 30 segundos aproximadamente.
  2. Peticiones en curso = peticiones por segundo × duración de una petición (ley de Little). Es el número que el servidor debe sostener.
  3. Un vCPU atiende como máximo 1000 ÷ (milisegundos de cálculo por petición) peticiones por segundo: 20 ms de cálculo, 50 peticiones por segundo.
  4. La memoria limita el número de workers: cada proceso PHP o Python ocupa de 40 a 200 MB.
  5. La caché lo cambia todo: una página servida desde una caché cuesta menos de un milisegundo; una página WordPress calculada, de 100 a 300.
  6. Mida con una prueba de carga (k6, wrk) sobre una copia de la aplicación, subiendo por escalones.

De los usuarios a las peticiones

«Usuarios simultáneos» designa tres magnitudes distintas según quién hable:

Se pasa de una a otra con la ley de Little: el número de peticiones en curso es igual al caudal, en peticiones por segundo, multiplicado por la duración media de una petición.

Ejemplo. 600 usuarios activos al mismo tiempo, que lanzan cada uno una petición cada 20 segundos, generan 30 peticiones por segundo. Si cada petición dura 100 ms, el servidor solo tiene 3 peticiones en curso de media. Lo que está en juego se encuentra en otra parte: en los picos y en las peticiones lentas.

Lo que sostiene un vCPU

Una petición ocupa el procesador durante su cálculo: ejecutar el código, consultar la base de datos, construir la respuesta. Un vCPU procesa, por tanto, como máximo 1000 ÷ t peticiones por segundo, donde t es el tiempo de cálculo de una petición en milisegundos. El tiempo de espera (una API externa, un disco) deja libre el procesador, pero sí ocupa un worker.

Tipo de peticiónTiempo de cálculo típicoPor vCPU, orden de magnitud
Archivo estático, o página servida desde una cachéMenos de 1 msVarios miles de peticiones por segundo
Página WordPress servida por una caché de páginas1 a 5 msVarios cientos por segundo
API JSON (Node.js, Go, FastAPI) con una consulta SQL indexada5 a 20 ms50 a 200 por segundo
Página WordPress o Laravel calculada en cada visita100 a 300 ms3 a 10 por segundo
Informe, exportación, generación de PDF500 ms a varios segundosMenos de 2 por segundo

Con estos órdenes de magnitud, 30 peticiones de API por segundo a 10 ms de cálculo ocupan el 30 % de un solo vCPU. Las mismas 30 peticiones por segundo sobre páginas WordPress sin caché piden de 3 a 9 vCPU. La caché de páginas sirve precisamente para que una página pase de la cuarta fila de la tabla a la segunda.

Lo que sostiene la memoria

Cada petición en curso la atiende un worker, y los workers ocupan memoria, trabajen o no. A menudo es la memoria, más que el procesador, la que fija el número de peticiones procesadas en paralelo:

Las conexiones persistentes (websockets, notificaciones en tiempo real) se cuentan aparte: abiertas de forma permanente, ocupan poco procesador y unas decenas de kilobytes de memoria cada una. Un servidor Node.js mantiene miles de ellas en unos cientos de MB.

Los verdaderos cuellos de botella

En una aplicación real, el servidor rara vez se satura donde se espera. Las causas más frecuentes, en el orden en que conviene buscarlas:

  1. Una consulta SQL lenta: un índice ausente convierte una consulta de 2 ms en una de 2 segundos, que retiene un worker y una conexión. pg_stat_statements en PostgreSQL, o el registro de consultas lentas de MySQL, la señala.
  2. Las consultas en cascada (el problema N+1): una página que lanza una consulta por cada fila mostrada lanza cientos.
  3. Una llamada externa síncrona: una API de pago o de IA que responde en 3 segundos bloquea un worker síncrono durante 3 segundos.
  4. Procesos pesados dentro de la petición: envío de correos, redimensionado de imágenes, generación de PDF, que conviene trasladar a una cola de tareas.
  5. La ausencia de caché: las páginas idénticas para todos los visitantes se sirven desde una caché, y los archivos estáticos desde el servidor web.

Verificarlo: la prueba de carga

Los órdenes de magnitud dan un primer tamaño; una prueba de carga da el real. El principio: simular usuarios cada vez más numerosos sobre una copia de la aplicación, y anotar el momento en que el tiempo de respuesta se dispara.

Terminal: 50 conexiones durante 30 segundos, con wrk
wrk -t2 -c50 -d30s --latency https://preprod.su-sitio.com/

Para un recorrido completo (inicio de sesión, navegación, búsqueda), k6 describe un escenario en JavaScript y hace subir la carga por escalones:

Script k6 (test.js), lanzado con: 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.su-sitio.com/');
  sleep(15);
}

Cuando la carga crece

El orden que menos cuesta y más aporta:

  1. Poner en caché lo que se pueda (páginas, fragmentos, resultados de consultas) y corregir las consultas lentas.
  2. Ajustar el número de workers a la memoria y al procesador disponibles.
  3. Pasar a un tamaño superior: más vCPU y más memoria, sin cambiar nada en la aplicación.
  4. Colocar la base de datos en su propio servidor.
  5. Repartir la aplicación entre varios servidores detrás de un balanceador de carga.

Las tres primeras etapas cubren la gran mayoría de las aplicaciones de gestión, los sitios web y las API: varios cientos de usuarios activos al mismo tiempo caben en un solo servidor bien ajustado.

Un servidor que crece con sus usuarios

El VPS Pro se ofrece en seis tamaños, sobre procesadores Intel Xeon, memoria ECC y SSD NVMe en espejo, y pasa al tamaño superior en cualquier momento, sin reinstalación. La Asistencia integral está incluida: díganos cuántos usuarios espera en el lanzamiento y dentro de un año, y le aconsejamos el tamaño; y cuando una página se ralentiza, diagnosticamos y le indicamos qué hacer, desde el sistema hasta el código de su aplicación.

Descubrir los VPS Pro

Preguntas frecuentes

¿Cuántos usuarios soporta un VPS de 2 vCPU y 4 GB?

Para una API o una aplicación cuyas peticiones requieren de 10 a 20 ms de cálculo, varios cientos de usuarios activos al mismo tiempo. Para un sitio WordPress sin caché de páginas, un centenar aproximadamente. La diferencia depende del tiempo de cálculo de cada petición y de la caché, de ahí el interés de una prueba de carga.

¿Cuántas visitas al día puede recibir un VPS?

El número de visitas al día dice poco: lo que cuenta es el pico. Para pasar de una cifra a otra, divida las visitas del día entre las horas de actividad, multiplique por las páginas vistas por visita y, después, por un factor de pico de 3 a 5. Así, 10 000 visitas en 10 horas, a 4 páginas cada una, dan alrededor de 1 página por segundo de media, y de 3 a 5 en el pico.

¿Cómo saber si mi servidor está saturado?

Tres señales: el tiempo de respuesta sube con el tráfico, el procesador se mantiene por encima del 80 % en horas punta, o la memoria disponible cae cerca de cero. Los registros del servidor web muestran entonces errores 502 o 504, y las peticiones esperan a que quede libre un worker.

¿Cambian los websockets el cálculo?

Sí: una conexión websocket permanece abierta de forma continua. Consume poco procesador y unas decenas de kilobytes de memoria. Un servidor Node.js mantiene miles de ellas; son los mensajes enviados, más que las conexiones abiertas, los que cargan el procesador.

Contáctenos