Libro blanco del lag en juegos › Buscar por síntoma
No conecta / carga infinita: 45 causas y sus responsables
También se dice: no me deja entrar, no puedo iniciar sesión, se queda cargando
Abrir en la guía de síntomas interactiva →
No logras entrar al juego, o te quedas detenido en la pantalla de carga o de entrada.
“No se puede conectar al servidor” una y otra vez, o la barra de carga no termina después de elegir personaje.
Lo que acepta las conexiones nuevas (la cola de conexiones pendientes del servidor, el firewall, el servidor de login, la BD) está lleno. Es especialmente frecuente justo después de un mantenimiento.
Causas de este síntoma
L2 SO y dispositivo del cliente
L3 Red doméstica
L4 Ruta por internet
- Restricciones de UDP e inspección de paquetes por país o ISP: Algunas redes bloquean ciertas direcciones y puertos UDP o limitan la velocidad del UDP, y sus dispositivos de inspección de paquetes filtran los protocolos que no reconocen. En esas redes, los juegos que se comunican por UDP no conectan o se desconectan a menudo. (Externo (Externo))
- Fallos y lentitud del DNS: Si el DNS, que traduce los nombres de servidor a direcciones, va lento o falla, el juego no encuentra los servidores de login ni de parches. (Externo (Externo))
- Enlaces compartidos saturados por un DDoS: Un ataque masivo dirigido a la empresa del juego, o a otro destino de la misma red, llena los enlaces compartidos. (Infraestructura de red (Equipo de infraestructura))
- IP compartida del ISP (CGNAT): En las redes móviles y en algunos ISP, varios abonados comparten una misma IP, y el mapeo de las conexiones inactivas se borra al poco tiempo. (Desarrollo de cliente (Equipo de desarrollo))
- Paso por una VPN o un acelerador de juegos: Con una VPN o un acelerador de juegos activado, los paquetes pasan por los servidores intermedios (relay) de esa empresa. Si el relay está lejos o saturado, la conexión acaba siendo más lenta que sin él. (Externo (Externo))
L5 Equipos de red del centro de datos
- Tabla de sesiones del firewall llena: El firewall registra en la tabla de sesiones cada conexión que deja pasar para hacerle seguimiento. Cuando la tabla se llena, ya no puede aceptar conexiones nuevas. (Infraestructura de red (Equipo de infraestructura))
- Desvío por la protección DDoS y falsos positivos: Para frenar un ataque, el tráfico se desvía a un centro de depuración (scrubbing), lo que alarga la ruta, y a veces se bloquea a jugadores legítimos tomándolos por atacantes. (Infraestructura de red (Equipo de infraestructura))
- Límites de conexiones y puertos del gateway NAT en la nube: Cuando los servidores de una subred privada abren conexiones hacia fuera (autenticación de la plataforma, pagos, API externas), el gateway NAT cambia su dirección y su puerto antes de enviarlas. Si las conexiones simultáneas hacia un mismo destino superan el límite de puertos del gateway, las conexiones nuevas fallan. (Infraestructura de red (Equipo de infraestructura))
- Desbalance del balanceador de carga y health checks erróneos: Las conexiones se concentran en un solo servidor, o se sigue enviando gente a un servidor que ya está caído. (Infraestructura de red (Equipo de infraestructura))
- Desajuste de MTU (solo desaparecen los paquetes grandes): Si la MTU (el tamaño máximo que se puede enviar de una vez) se reduce en un tramo intermedio y los avisos de tamaño excedido están bloqueados, solo los paquetes grandes desaparecen una y otra vez. (Infraestructura de red (Equipo de infraestructura))
L7 SO del servidor (kernel)
- Desbordamiento de la cola de conexiones pendientes (backlog): Cuando decenas de miles de jugadores se conectan a la vez justo después de un mantenimiento, la cola de conexiones pendientes (backlog) del kernel se desborda y se descartan intentos de conexión. (Desarrollo de servidor (Equipo de desarrollo))
- Límite de descriptores de archivo: Cada conexión necesita un descriptor de archivo (fd, el número que el SO asigna a cada archivo o socket abierto), y el número de fd que puede abrir un proceso es limitado. (Infraestructura de servidores (Equipo de infraestructura))
- Tabla conntrack del servidor llena: Cuando la tabla de seguimiento de conexiones (conntrack), donde el firewall de Linux registra todas las conexiones, llega a su límite, se descartan paquetes nuevos. (Infraestructura de servidores (Equipo de infraestructura))
- Agotamiento de puertos efímeros en conexiones entre servidores: Si el servidor del juego abre y cierra conexiones cortas con frecuencia hacia la BD u otros servidores, las conexiones cerradas siguen ocupando su puerto un tiempo y no se pueden abrir conexiones nuevas. (Desarrollo de servidor (Equipo de desarrollo))
L8 Sockets y protocolos
- Keepalive con valor predeterminado de 2 horas: Si el otro extremo desaparece sin enviar una señal de cierre, TCP tarda mucho en detectarlo. El keepalive (la función de TCP que comprueba si una conexión inactiva sigue viva) viene desactivado por defecto y, aunque se active, no empieza a comprobar hasta que la conexión lleva 2 horas inactiva. (Desarrollo de servidor (Equipo de desarrollo))
- Reparto desigual con SO_REUSEPORT: Cuando varios procesos reciben en el mismo puerto, el kernel asigna cada conexión a un proceso según un hash de la dirección y no cambia esa asignación. Si ese proceso se detiene, solo esperan los jugadores asignados a él. (Desarrollo de servidor (Equipo de desarrollo))
L9 Proceso del juego en el servidor
- Agotamiento del pool de hilos: Si todos los hilos de trabajo que procesan tareas quedan atados a trabajos lentos, las solicitudes nuevas esperan indefinidamente. (Desarrollo de servidor (Equipo de desarrollo))
L11 Disco
- Escritura de core dumps: Cuando el servidor se cae, escribe en disco varios GB de memoria, y eso puede retrasar el reinicio varios minutos. (Infraestructura de servidores (Equipo de infraestructura))
L12 Base de datos
- Consultas sin índice: Sin índice, encontrar las filas que cumplen una condición obliga a leer la tabla entera (escaneo completo). (Desarrollo de servidor (Equipo de desarrollo))
- Agotamiento del pool de conexiones: El número de conexiones abiertas con la BD es fijo, así que si las consultas lentas ocupan las conexiones, las demás solicitudes esperan. (Desarrollo de servidor (Equipo de desarrollo))
- Caché fría (justo después de reiniciar): Al reiniciar la BD, su caché en memoria está vacía, y durante un tiempo todas las consultas leen del disco. (Infraestructura de BD (Equipo de infraestructura))
- Avalancha de inicios de sesión y consultas N+1: Si cargar un personaje requiere decenas de consultas separadas, decenas de miles de inicios de sesión simultáneos se convierten en millones de consultas. (Desarrollo de servidor (Equipo de desarrollo))
- Failover de la BD: Cuando la BD principal cae, no se puede escribir mientras se cambia a la de respaldo, y los últimos datos que no llegaron a replicarse pueden perderse. (Infraestructura de BD (Equipo de infraestructura))
- Estampida de caché: Si la caché de unos datos populares caduca a la vez, miles de solicitudes se lanzan de golpe contra la BD. (Desarrollo de servidor (Equipo de desarrollo))
- Comandos lentos en Redis: Redis procesa los comandos de uno en uno, así que un solo comando lento bloquea todas las solicitudes que vienen detrás. (Desarrollo de servidor (Equipo de desarrollo))
- Consultas lentas por un cambio en el plan de ejecución: Aunque el código no cambie, si la BD cambia la forma de procesar una consulta (el plan de ejecución), una consulta que ayer tardaba 2 ms hoy tarda cientos de ms. (Infraestructura de BD (Equipo de infraestructura))
- Bloqueos por cambios de esquema (DDL) en producción: Si se añade una columna o un índice a una tabla con el servicio en marcha, un bloqueo que solo se necesita durante un instante puede dejar esperando a todas las solicitudes que usan esa tabla. (Infraestructura de BD (Equipo de infraestructura))
L13 Arquitectura y operación de servidores
- Cambio de zona (traspaso entre servidores): Al entrar en otra zona o mazmorra, los datos del personaje se traspasan a otro servidor, y en ese proceso surgen retrasos y fallos. (Desarrollo de servidor (Equipo de desarrollo))
- Fallo en cascada: Cuando un servicio se vuelve lento, los servidores que lo llaman se quedan bloqueados esperando su respuesta y hasta funciones sin relación se detienen. (Desarrollo de servidor (Equipo de desarrollo))
- Caída de un servidor auxiliar: Si falla un servidor que funciona aparte del servidor del juego, como el del chat, los grupos o la casa de subastas, solo deja de funcionar esa función. (Desarrollo de servidor (Equipo de desarrollo))
- Despliegues y reinicios: Si al reiniciar un servidor para actualizarlo no se trasladan sus conexiones, los jugadores que estaban en él se desconectan, y los guardados justo antes del cierre y las reconexiones llegan todos de golpe. (Desarrollo de servidor (Equipo de desarrollo))
- Retraso del autoescalado: Cuando se junta mucha gente, se añaden servidores automáticamente, pero prepararlos lleva unos minutos y mientras tanto los servidores existentes van sobrecargados. (Infraestructura de servidores (Equipo de infraestructura))
- Dependencia de servicios externos: Si un servicio externo, como el login de la plataforma, los pagos o la verificación de identidad, va lento o se detiene, todo se bloquea en ese paso. (Externo (Externo))
- Certificado TLS expirado o mal configurado: Si el certificado de un servidor de login, de API o de parches expira o le falta el certificado intermedio, desde ese momento falla la conexión TLS de los clientes que abren una conexión nueva. (Infraestructura de red (Equipo de infraestructura))
- Tope de la cola de inicio de sesión y periodo de gracia para reconectar demasiado corto: Cuando la gente entra en masa justo después de un lanzamiento o un mantenimiento, la cola de inicio de sesión llega a su tope y rechaza nuevas entradas, y quien estaba esperando pierde su lugar si se desconecta un momento y vuelve al final de la cola. (Desarrollo de servidor (Equipo de desarrollo))
Diseño del netcode
Problemas que solo afectan a algunos
- Personaje con datos sobredimensionados: Un personaje con miles de objetos o correos acumulados, o con listas de amigos o de bloqueados y buffs fuera de lo normal, tiene varias veces más datos que cargar al conectarse, que guardar y que anunciar a su alrededor. Va lento solo con ese personaje, sin importar la conexión. (Desarrollo de servidor (Equipo de desarrollo))
- Colisión de puertos UDP fijos: Si el cliente está hecho para usar un puerto local fijo, el segundo cliente de la misma computadora no puede usar ese puerto o se reparte los paquetes con el primero. (Desarrollo de cliente (Equipo de desarrollo))
- Restricciones al multicliente: Si el módulo de seguridad o una política del servidor limitan los clientes de una misma computadora, el segundo cliente no puede abrirse o conectarse, o se desconecta el que se abrió primero. Algunos juegos solo bloquean funciones del cliente adicional. (Desarrollo de cliente (Equipo de desarrollo))
Causas raíz de la retransmisión TCP
- Descartes del firewall o del seguimiento de conexiones: Los firewalls y el seguimiento de conexiones de Linux (conntrack, la función que registra en una tabla las conexiones que pasan) descartan paquetes cuando la tabla se llena o cuando consideran que no encajan con el estado de la conexión. (Infraestructura de red (Equipo de infraestructura))
- Agujero negro de MTU (solo los paquetes grandes se pierden una y otra vez): Si un tramo intermedio pasa a aceptar paquetes más pequeños y el aviso de “demasiado grande” (ICMP) está bloqueado, los paquetes grandes siguen desapareciendo por muchas veces que se reenvíen. (Infraestructura de red (Equipo de infraestructura))
- Retransmisión de la solicitud de conexión (SYN): Si una solicitud de conexión se pierde porque se desborda la cola de conexiones pendientes (backlog) o porque la bloquea un firewall, el SO del cliente la reenvía al cabo de 1 segundo y luego a intervalos cada vez más largos. (Desarrollo de servidor (Equipo de desarrollo))
Ver la guía de síntomas interactiva