한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Libro blanco del lag en juegos › L7 SO del servidor (kernel)

Pausas por recuperación y compactación de memoria Memory compaction / reclaim stalls (THP)

ID de la causa so-reclaim · Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Mientras el SO compacta la memoria para formar páginas grandes (huge pages) o recupera memoria libre, el proceso se detiene.

Por qué Baja la memoria libre, o la función de páginas grandes (THP) ejecuta una compactación de memoria → Efecto El hilo que pidió memoria espera hasta que terminan la recuperación y la compactación → En pantalla Detenciones irregulares del servidor (de varios ms a cientos de ms)

Síntomas
Congelamiento, Tirones
Factores
Detención
A quién afecta
Todo el servidor
Cuándo
Cuanto más tiempo lleva encendido, De vez en cuando, al azar
Responsable
Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Reducir las asignaciones grandes de memoria durante la ejecución (reservar la memoria al arrancar y reutilizarla).
Tareas (Equipo de infraestructura)
Configurar las páginas grandes (THP) para que solo se usen donde hacen falta (madvise), subir el umbral de memoria libre (vm.min_free_kbytes, entre otros).
En el gráfico
Picos aleatorios · Tiempo de tick del servidor, PSI de memoria
Dónde mirar
some y full de /proc/pressure/memory (porcentaje de tiempo detenido esperando memoria) e incremento de compact_stall en /proc/vmstat, junto al tiempo de tick del servidor; revisar la configuración de /sys/kernel/mm/transparent_hugepage/defrag
Se confirma si
En los picos de tick sube el PSI de memoria y aumenta compact_stall. defrag en always
Se descarta si
Si el PSI y compact_stall no cambian, no es esta causa. Si aumenta el uso de swap: “Swap”
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)

Fuentes

  1. Transparent Hugepage Support Linux kernel
    Con defrag=always, cuando falla una asignación THP, se recupera y compacta memoria en ese mismo momento y el proceso se detiene; con madvise, solo en las regiones que lo piden
  2. Documentation for /proc/sys/vm/ Linux kernel
    min_free_kbytes: memoria libre mínima que el kernel mantiene en reserva (marca de agua)
  3. PSI - Pressure Stall Information Linux kernel
    some (porcentaje de tiempo en que algunas tareas estuvieron detenidas esperando memoria) y full (porcentaje de tiempo en que todas estuvieron detenidas) de /proc/pressure/memory

Ver también

Misma capa: L7 SO del servidor (kernel)

Causas de otras capas con el mismo síntoma (Congelamiento)

Ver la ficha interactiva con gráficos y simulaciones