Libro blanco del lag en juegos › Buscar por síntoma
Tirones: 60 causas y sus responsables
También se dice: stuttering, se traba, va a saltos, parecen caídas de FPS
Abrir en la guía de síntomas interactiva →
El movimiento pierde fluidez: se para un instante y sigue, una y otra vez.
Los demás personajes, o toda tu pantalla, avanzan a trompicones. Los puntos de la trayectoria se amontonan y luego se separan.
Si el ping se ve normal, lo más probable es un problema de frames en tu PC (cliente o SO); si el ping sube y baja, lo más probable es jitter del Wi-Fi o de la conexión. Eso sí, el ping que muestra el juego suele medirse dentro del bucle del juego, que se ejecuta una vez por frame, así que un pico de frametime también puede disparar la cifra de ping.
Causas de este síntoma
L1 Proceso del juego en el cliente
- Pico de frametime: Calcular un frame tarda varias veces más de lo normal y la imagen se detiene un instante. (Desarrollo de cliente (Equipo de desarrollo))
- Recolección de basura (GC) en el cliente: El juego entero se detiene mientras se recupera la memoria ya usada y desechada (basura). Lo característico son tirones a intervalos regulares. (Desarrollo de cliente (Equipo de desarrollo))
- Carga síncrona y compilación de shaders en el hilo principal: El juego se detiene para leer archivos y crear shaders justo antes de dibujar zonas, monstruos o efectos que aparecen por primera vez. (Desarrollo de cliente (Equipo de desarrollo))
- Almacenamiento lento que retrasa el streaming de assets: En un almacenamiento lento como un HDD, la lectura de texturas y modelos de un mundo abierto no sigue el ritmo del desplazamiento, así que las entidades aparecen tarde o el juego da tirones mientras espera la lectura. (Desarrollo de cliente (Equipo de desarrollo))
- Carga de renderizado de multitudes: Cuando cientos de jugadores entran en la misma pantalla, como en un asedio o un world boss, el costo de dibujarlos se vuelve inasumible. (Desarrollo de cliente (Equipo de desarrollo))
- Búfer de interpolación ausente o demasiado corto: Si el cliente dibuja los paquetes del servidor en cuanto llegan, el jitter (variación en el tiempo de llegada de los paquetes) se ve tal cual en pantalla. (Desarrollo de cliente (Equipo de desarrollo))
- Extrapolación excesiva (dead reckoning): Mientras no llegan paquetes, el cliente sigue mostrando a los personajes en movimiento con su última velocidad y, cuando descubre que se equivocó, los devuelve a su sitio. (Desarrollo de cliente (Equipo de desarrollo))
- Espiral de recuperación con timestep fijo: Tras una pausa, el juego intenta recuperar de golpe los cálculos atrasados, y esos mismos cálculos lo vuelven a retrasar. (Desarrollo de cliente (Equipo de desarrollo))
- Error de sincronización del reloj: Si la hora del servidor que estima el cliente es errónea, el momento de interpolación y la validación de los cooldowns quedan desfasados. (Desarrollo de cliente (Equipo de desarrollo))
- Pérdida de precisión del tiempo en float: Si el juego guarda su hora en un formato decimal de baja precisión (float), cuanto más tiempo lleva encendido, peor es la resolución temporal (la diferencia de tiempo más pequeña que se puede distinguir), y los movimientos y los efectos tiemblan. (Desarrollo de cliente (Equipo de desarrollo))
- V-Sync y cola de renderizado: Los frames que dibuja la GPU se acumulan en una cola de varios frames y salen al ritmo del monitor; mientras tanto, el input se retrasa. (Desarrollo de cliente (Equipo de desarrollo))
- Fuga de memoria en el cliente: Cuanto más tiempo lleva encendido, más memoria usa: el juego va cada vez más lento y al final se cierra a la fuerza. (Desarrollo de cliente (Equipo de desarrollo))
- Escaneos del módulo anti-cheat: El módulo de seguridad que se ejecuta junto al juego para impedir los hacks hace escaneos periódicos. Si el escaneo es pesado o si el heartbeat (señal periódica que confirma que el cliente sigue activo) que intercambia con el servidor de seguridad llega tarde, hay tirones o desconexiones. (Desarrollo de cliente (Equipo de desarrollo))
L2 SO y dispositivo del cliente
- Procesos en segundo plano que ocupan la CPU: Cuando un análisis del antivirus, Windows Update, un software de streaming o un video en el navegador ocupan los núcleos, el hilo del juego espera sin recibir CPU. (Externo (Externo))
- Ahorro de energía y thermal throttling: El modo batería de una computadora portátil, el modo de ahorro de energía del teléfono o el calor del dispositivo reducen la velocidad de la CPU y la GPU. Lo característico del calor es que al principio todo va bien y la lentitud llega al cabo de un rato. (Externo (Externo))
- Resolución del temporizador: El temporizador predeterminado de Windows funciona en pasos de 15.6 ms, así que “esperar solo 1 ms” se alarga en la práctica hasta el siguiente ciclo del temporizador, hasta 15.6 ms. (Desarrollo de cliente (Equipo de desarrollo))
- Inspección de paquetes del software de seguridad: Si el antivirus o el firewall inspeccionan cada paquete, la latencia aumenta y, si se exceden, toman el juego por un ataque y lo bloquean. (Externo (Externo))
- Falta de memoria y swap en el cliente: Con decenas de pestañas del navegador abiertas junto al juego, el SO saca a disco parte de la memoria del juego. (Externo (Externo))
- Falta de memoria gráfica (VRAM): Si las opciones gráficas piden más memoria de la que tiene la tarjeta gráfica, el SO saca texturas a la RAM del sistema y las vuelve a traer, y hay tirones. (Desarrollo de cliente (Equipo de desarrollo))
- Escaneo de Wi-Fi en segundo plano: Mientras el SO salta periódicamente de canal en canal para buscar redes Wi-Fi cercanas, la comunicación se detiene un instante. (Externo (Externo))
- Ahorro de energía y drivers de la NIC: Si la tarjeta de red o el chip Wi-Fi entran en ahorro de energía entre paquete y paquete, tardan en volver a activarse. (Externo (Externo))
- Procesamiento limitado con la ventana minimizada o sin foco: Si miras otra ventana o minimizas el juego, el juego y Windows lo ralentizan para ahorrar energía. Al volver, los paquetes atrasados llegan de golpe o la conexión ya se cortó. (Desarrollo de cliente (Equipo de desarrollo))
- Interferencias de programas de overlay: Los programas de mensajería, los launchers, los grabadores y los contadores de FPS se meten en el proceso de renderizado del juego (hooking) para dibujar su propia UI encima de la imagen. Añaden trabajo en cada frame y, a veces, chocan con el juego y provocan un tirón o un cierre forzado. (Externo (Externo))
L3 Red doméstica
- Interferencias y señal débil en el Wi-Fi: Con señal débil o interferencias, el tramo inalámbrico tiene que reintentar el envío varias veces y los paquetes llegan de forma irregular. (Externo (Externo))
- Canal Wi-Fi saturado: En sitios con decenas de routers, como un edificio de apartamentos, hay que compartir el mismo canal y esperar turno para transmitir. (Externo (Externo))
- Router poco potente o sobrecalentado: Cuando un router barato tiene decenas de dispositivos y miles de conexiones, el propio router no da abasto. (Externo (Externo))
- Señal móvil débil y zonas sin cobertura: En ascensores, sótanos o el interior de los edificios aumentan las retransmisiones, baja la velocidad y al final se cae la conexión. (Externo (Externo))
- Cambios frecuentes 5G↔LTE (en el límite de la cobertura 5G): En el interior de edificios con poca señal 5G o en el límite de la cobertura 5G, el teléfono salta a menudo entre 5G y LTE, y en cada cambio el ping da un pico o la comunicación se corta un instante. (Externo (Externo))
L4 Ruta por internet
- Internet satelital (órbita baja y geoestacionaria): En internet satelital la señal tiene que ir al espacio y volver. Con satélites geoestacionarios, solo la ida y vuelta ya supera los 0.5 segundos. Los satélites de órbita baja como Starlink suelen ser rápidos, pero cuando se reasigna la ruta la latencia oscila y la conexión puede cortarse un instante. (Externo (Externo))
- Congestión del peering en horas pico: Entre las 9 y las 11 de la noche, más o menos, el tráfico de video se dispara y los enlaces de interconexión entre ISP (peering) tienden a congestionarse. (Infraestructura de red (Equipo de infraestructura))
- Una ruta ECMP defectuosa: Los ISP y los centros de datos tienen varias rutas hacia el mismo destino y asignan una a cada conexión. Si se estropea una sola ruta, solo los jugadores asignados a ella siguen con lag. (Infraestructura de red (Equipo de infraestructura))
L6 Tarjeta de red del servidor
- Sobrecarga de virtualización y vecino ruidoso: Cuando otras máquinas virtuales del mismo servidor físico usan mucha red o CPU, el procesamiento de nuestro servidor se retrasa de forma irregular. (Infraestructura de servidores (Equipo de infraestructura))
L7 SO del servidor (kernel)
- Exceso de hilos y cambios de contexto: Si se ejecutan muchos más hilos que núcleos, el SO gasta CPU solo en irlos turnando. (Desarrollo de servidor (Equipo de desarrollo))
- CPU steal (máquinas virtuales): Mientras el servidor físico (hipervisor) cede por un momento el tiempo de CPU de la máquina virtual a otra máquina virtual (CPU steal), el servidor del juego se detiene. (Infraestructura de servidores (Equipo de infraestructura))
- Throttling de CPU en contenedores (cuota de CFS): Si un contenedor tiene un límite de CPU, en cuanto agota su cuota dentro del periodo fijado (normalmente 100 ms), se detiene a la fuerza el resto del periodo (throttling). (Infraestructura de servidores (Equipo de infraestructura))
- Pausas por recuperación y compactación de memoria: Mientras el SO compacta la memoria para formar páginas grandes (huge pages) o recupera memoria libre, el proceso se detiene. (Infraestructura de servidores (Equipo de infraestructura))
- Tareas programadas: La compresión de logs, las copias de seguridad y los análisis de seguridad que se ejecutan todos los días a la misma hora ocupan la CPU y el disco. (Infraestructura de servidores (Equipo de infraestructura))
- Cambios de rendimiento tras actualizar el SO, el kernel, los drivers o el firmware: El código del juego no cambia, pero el servidor se vuelve más lento después de actualizar el SO, el kernel, los drivers o el firmware. Las actualizaciones pueden cambiar valores predeterminados, el planificador, las mitigaciones de vulnerabilidades de la CPU (mitigations) o el comportamiento de los drivers. (Infraestructura de servidores (Equipo de infraestructura))
L9 Proceso del juego en el servidor
- Tick que excede su presupuesto: Si el trabajo de un tick supera su presupuesto, el intervalo de tick del servidor se alarga y toda esa zona va más lenta o va a tirones. (Desarrollo de servidor (Equipo de desarrollo))
- Explosión del cálculo de visibilidad (AOI, N²): Si se compara a todos con todos para saber quién puede ver a quién, cuando el número de jugadores se multiplica por 10, el cálculo se multiplica por 100. (Desarrollo de servidor (Equipo de desarrollo))
- Llamadas síncronas en el hilo del juego: Si durante un tick se espera la respuesta de la BD o una escritura en archivo, todo el avance del juego en el servidor se detiene ese tiempo. (Desarrollo de servidor (Equipo de desarrollo))
- Temporizadores que se disparan todos a la vez: Si la reaparición de todos los monstruos, el fin de todos los buffs y las recompensas a la hora en punto caen en el mismo tick, ese tick pesa decenas de veces más. (Desarrollo de servidor (Equipo de desarrollo))
- Acumulación de entidades (objetos e invocaciones sin limpiar): Si los objetos tirados en el suelo, las invocaciones y los temporizadores terminados que deberían desaparecer no se limpian y se acumulan, el trabajo de cada tick crece cuanto más tiempo lleva encendido el servidor. (Desarrollo de servidor (Equipo de desarrollo))
L10 Memoria
- Pausa del GC en el motor de scripts: Aunque el servidor esté escrito en C++, si las misiones, la IA y las habilidades se ejecutan en scripts como Lua, la zona se detiene mientras corre el GC del motor de scripts. (Desarrollo de servidor (Equipo de desarrollo))
- Avalancha de asignaciones: Si durante un evento se crean muchísimos objetos temporales, el GC se ejecuta mucho más a menudo que de costumbre. (Desarrollo de servidor (Equipo de desarrollo))
L11 Disco
- Escritura síncrona de logs: Si el hilo del juego espera a que el disco termine cada línea de log, cuando el disco está ocupado el juego también se detiene. (Desarrollo de servidor (Equipo de desarrollo))
- Avalancha de fsync: Pedir que los datos se escriban en disco “con garantía” cuesta, según el disco, de 0.1 ms a decenas de ms por llamada, y si se acumulan las solicitudes, la cola se alarga. (Desarrollo de servidor (Equipo de desarrollo))
- Agotamiento de los créditos de ráfaga del disco en la nube: Algunos discos en la nube y las instancias pequeñas tienen créditos de ráfaga para rendir por encima de su nivel base durante un rato; si la actividad intensa se alarga y los créditos se agotan, la velocidad cae de golpe. (Infraestructura de servidores (Equipo de infraestructura))
- Copias de seguridad, compresión y escaneos: Cuando una copia de seguridad de madrugada, la compresión de logs o un escaneo de seguridad acaparan el disco, las lecturas y escrituras del servidor del juego se retrasan. (Infraestructura de servidores (Equipo de infraestructura))
L12 Base de datos
- Checkpoint y volcado del log: Cuando la BD vuelca de golpe al disco, de forma periódica, los cambios que tiene en memoria, las consultas se ralentizan. (Infraestructura de BD (Equipo de infraestructura))
L13 Arquitectura y operación de servidores
- Sobrecarga por logs y monitoreo: Cuando hay un incidente, los logs se disparan, y los servidores que envían sus logs de forma síncrona se vuelven todavía más lentos por culpa de esos logs. (Desarrollo de servidor (Equipo de desarrollo))
Diseño del netcode
- Espera al jugador más lento en lockstep: En una arquitectura en la que todos calculan juntos el mismo turno, si el input de uno llega tarde, todos esperan. (Desarrollo de servidor (Equipo de desarrollo))
- Reproducción al llegar, sin marcas de tiempo: Si los eventos del servidor no llevan la hora en que ocurrieron y se reproducen en cuanto llegan, el timing de las animaciones sigue tal cual el jitter de la red. (Desarrollo de cliente (Equipo de desarrollo))
- Arquitectura de anfitrión (host): Cuando la computadora de un jugador hace de servidor, su conexión y el rendimiento de su PC determinan lo que perciben todos. (Desarrollo de servidor (Equipo de desarrollo))
- Tasa de envío de snapshots baja: Si el servidor envía las actualizaciones de posición (snapshots) solo unas pocas veces por segundo, hay que alargar en proporción el búfer de interpolación, y los demás personajes se ven más en el pasado. (Desarrollo de servidor (Equipo de desarrollo))
Problemas que solo afectan a algunos
- Tamaño del búfer de inputs de cada jugador: Si el servidor guarda un poco los inputs de cada jugador y los saca de uno en uno por tick, los demás lo ven fluido, pero el momento en que el servidor confirma las acciones de ese jugador se retrasa en la misma medida. (Desarrollo de servidor (Equipo de desarrollo))
- Un cliente lento controla al monstruo: Para reducir la carga del servidor, algunos juegos delegan el cálculo del movimiento de un monstruo en el cliente de un jugador cercano. Si la conexión de ese jugador es mala, el monstruo se mueve raro en las pantallas de todos. (Desarrollo de servidor (Equipo de desarrollo))
- Fallo de streaming por falta de memoria o VRAM: Si dos clientes se reparten la memoria gráfica, no queda sitio para cargar los modelos y texturas nuevos que hacen falta, y algunos no se dibujan. (Desarrollo de cliente (Equipo de desarrollo))
- Entidades retenidas por errores en la estimación del reloj: Si la hora del servidor que estima el cliente es incorrecta, la información de entidades que acaba de llegar se retiene “porque todavía es futuro” o se descarta “porque es demasiado antigua”. (Desarrollo de cliente (Equipo de desarrollo))
Causas raíz de la retransmisión TCP
- Retransmisiones rápidas espurias por reordenamiento de paquetes: Cuando los paquetes cambian de orden al pasar por varias rutas o por enlaces agregados, el receptor avisa con ACK duplicados de que “falta un paquete”, y el emisor reenvía paquetes que estaban bien. (Infraestructura de red (Equipo de infraestructura))
Ver la guía de síntomas interactiva