spark é o profiler para servidores Minecraft. Quando o servidor dá travadas, o spark te diz em segundos se a taxa de ticks está sofrendo, quais plugins ou farms estão consumindo tempo e se a CPU ou a memória chegou ao limite. Este guia mostra os três comandos de que tu realmente precisas e como ler os números. As capturas de tela vêm de um servidor de teste com Paper 1.21.4.

Instalação

spark roda como plugin no Paper e no Spigot e como mod no Fabric, NeoForge e Forge. No painel, tu o encontras em Plugins → Browser. Ele não precisa de configuração. Os comandos pertencem ao grupo de moderação; o nó para isso se chama spark. Como atribuí-lo está em LuckPerms: configurar permissões.

Primeiro olhar: TPS e duração dos ticks

/spark tps mostra três linhas:

Saída de /spark tps: TPS, durações dos ticks e uso de CPU
Saída de /spark tps: TPS, durações dos ticks e uso de CPU
  • TPS (ticks por segundo) nos últimos 5 segundos, 10 segundos, 1, 5 e 15 minutos. 20,0 é o máximo. A partir de cerca de 19, os jogadores ainda não percebem nada; abaixo de 15, animais se movem aos solavancos; abaixo de 10, o servidor fica injogável.
  • Duração dos ticks como mínimo, mediana, percentil 95 e máximo em milissegundos. Um tick pode durar 50 ms para manter 20 TPS. Na imagem, a mediana está em 2,4 ms; portanto, o servidor tem bastante folga. O decisivo é o percentil 95: se ele estiver perto de 50 ms, haverá travadas, mesmo que a média pareça boa.
  • Uso de CPU separado por sistema (a máquina inteira) e processo (apenas o teu servidor). Em um servidor alugado, o valor do processo é o importante.

/spark healthreport resume os mesmos valores com memória e disco em um relatório.

O profiler: quem está consumindo tempo?

Quando o TPS cai, inicia o profiler:

/spark profiler start

spark confirma o início e continua rodando em segundo plano. Deixa-o rodar por pelo menos um minuto enquanto o problema acontece, depois:

/spark profiler stop
O profiler roda em segundo plano; spark mostra os comandos para exibir, parar e cancelar
O profiler roda em segundo plano; spark mostra os comandos para exibir, parar e cancelar

Ao parar, o spark envia o relatório para spark.lucko.me e gera um link. O relatório não contém nomes de jogadores, endereços IP nem mensagens de chat, mas sim árvores de chamadas do processo Java. /spark profiler open abre o relatório ainda durante a execução, e /spark profiler cancel o descarta sem upload.

No relatório, expande a árvore de cima para baixo. O que tu normalmente encontras:

  • Ticks de entidades de um tipo específico: uma farm com centenas de animais ou itens. Reduz a farm ou acalma-a com entity-activation-range em paper-world-defaults.yml.
  • Um plugin em um event listener: atualiza o plugin, verifica a configuração ou substitui-o.
  • Carregamento de chunks por jogadores que voam rápido: reduz a distância de visão ou pré-gera o mundo com Chunky.
  • Relógios de redstone: um circuito que nunca para. Pede ao jogador para desligá-lo.

Garbage Collection e memória

/spark gc mostra com que frequência e por quanto tempo a limpeza de memória do Java pausa. Muitas pausas longas significam pouca RAM ou vazamento de memória em um plugin. /spark heapsummary lista quais tipos de objetos ocupam a memória. Antes de contratar mais RAM, vale olhar aqui: muitas vezes uma atualização de plugin resolve o problema.

Erros típicos

  • TPS 20, mas ainda há lag. O problema está no cliente ou na rede. /spark ping mostra a latência por jogador.
  • Esqueceste o link do profiler. /spark profiler sem argumentos mostra o status; depois de parar, o link também aparece no console do servidor.
  • Números sem comparação. Um valor de TPS sozinho diz pouco. Mede uma vez com o servidor vazio como referência.

FAQ

A partir de qual valor de TPS os jogadores percebem algo?

Até cerca de 19 TPS, nada chama atenção. Abaixo de 15, animais e projéteis se movem aos solavancos; abaixo de 10, o servidor fica injogável. Presta menos atenção à média e mais ao percentil 95 da duração dos ticks: se ele estiver perto de 50 ms, há travadas, mesmo que a média de TPS pareça boa.

Um relatório do spark contém dados pessoais dos meus jogadores?

Não. O relatório consiste em árvores de chamadas do processo Java e não contém nomes de jogadores, endereços IP nem mensagens de chat. Se mesmo assim não quiseres enviar nada, descarta a execução com /spark profiler cancel ou lê o relatório diretamente no jogo com /spark profiler open.

Por quanto tempo o profiler deve rodar?

Pelo menos um minuto, e justamente enquanto o problema realmente acontece. Uma execução em um servidor tranquilo só mostra que está tudo bem. Em travadas esporádicas, deixa-o rodar por mais tempo e para-o logo depois de uma falha.

Mais RAM ajuda contra lag?

Só se a limpeza de memória for a causa. /spark gc mostra frequência e duração das pausas do Java, e /spark heapsummary mostra os tipos de objetos que ocupam memória. Muitas vezes há um único plugin por trás, e uma atualização resolve o problema de forma mais barata do que mais RAM.

O TPS está em 20 e mesmo assim há travadas — e agora?

Então o problema não está no tick do servidor, mas no cliente ou na rede. /spark ping mostra a latência por jogador. Se afetar só jogadores específicos, a conexão deles é a causa; se afetar todos, verifica a distância de visão e a taxa de quadros no cliente.

Guias complementares

Gerar um mundo antecipadamente tira do servidor o trabalho de carregar chunks: Chunky: pré-gerar o mundo. Como o painel informa TPS baixo de forma contínua está descrito em Lag no servidor Minecraft: TPS e Watchdog.

Fontes