ID da causa mem-swap · Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Quando falta memória e o SO manda parte dela para o disco, cada uso dessa memória passa a esperar pelo disco, que é mais de 1.000 vezes mais lento.
Por quê A memória em uso passa da RAM física → Efeito O SO manda uma parte para o disco e lê de volta quando precisa → Na tela O tick dispara para centenas de ms, e todos os jogadores do servidor ficam em câmera lenta ou com travamento
Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Limitar o uso de memória do processo (tamanho do heap etc.) e procurar vazamentos.
O que fazer (Equipe de infraestrutura)
Configurar os servidores do jogo para não usar swap, agir com base em alertas de memória e, como sem swap o processo é encerrado à força (OOM) no instante em que falta memória, garantir RAM com folga acima do uso de pico.
Números de referência
Leitura da RAM: cerca de 100 ns. Releitura do SSD: cerca de 100 µs (1.000 vezes). Disco na nuvem, do outro lado da rede: cerca de 1 ms (10 mil vezes). HDD: 10 ms (100 mil vezes).
No gráfico
Subida lenta · Uso de swap, swap in/out
Onde olhar
Sobrepor ao tempo de tick as colunas si e so do vmstat 1 (quanto foi lido do swap e mandado para o swap por segundo), os valores some e full de /proc/pressure/memory (proporção de tempo parado esperando memória) e o majflt/s do pidstat -r no processo do servidor do jogo (page faults que exigiram leitura do disco)
Confirma se
No horário do lag, si fica acima de 0, e o majflt/s do servidor do jogo e o full de memory sobem juntos
Descarta se
si e so em 0 e pressão de memória (PSI) perto de 0: não é swap. Sem swap, mas com majflt/s e PSI subindo: a memória acabou e o SO está relendo páginas de código; liberar memória vem primeiro
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
Servidores com GC leem o heap todo durante a coleta, então, mesmo que só uma parte do heap vá para o swap, um único GC pode passar a levar de alguns a dezenas de segundos. Sem swap, não existe a fase de lentidão causada pelo swap: o processo vai direto para o encerramento forçado (OOM), por isso é preciso garantir memória livre antes. Mesmo sem swap, quando a memória está quase no fim, o SO tira da memória até as páginas de código do executável e precisa lê-las de novo, e o servidor inteiro pode ficar muito lento por um tempo antes do encerramento forçado.
Documentation for /proc/sys/vm/Linux kernel swappiness: custo relativo entre swap e recuperação de páginas de arquivo; o swap é caro porque é I/O aleatório
Concepts overviewLinux kernel O kernel recupera páginas do page cache que têm cópia no disco e páginas que podem ir para o swap; se ainda faltar memória, o OOM killer mata um processo
Solidigm™ D7-P5520 and D7-P5620 Product BriefSolidigm Latência no percentil 99,99 (four-nines latency) de 130 µs em SSDs NVMe para servidores: base para dizer que uma leitura de SSD leva cerca de 100 µs
vmstat(8) — Linux manual pageprocps-ng si: memória lida do swap por segundo; so: memória mandada para o swap por segundo
PSI - Pressure Stall InformationLinux kernel some (proporção de tempo em que algumas tarefas ficaram paradas) e full (proporção de tempo em que todas as tarefas ficaram paradas ao mesmo tempo) de /proc/pressure/memory