O que o analisador verifica
O spark registra o que o servidor estava fazendo muitas vezes por segundo e envia isso junto com os números e os arquivos de config do servidor. O analisador lê tudo e passa por quatro coisas:
- Como o servidor está. TPS e MSPT dos últimos minutos, CPU, memória, jogadores e entidades carregadas, e uma barra por minuto para você ver quando ficou lento.
- O Java e a máquina. O tamanho do heap, o coletor de lixo e se ele usa as flags do Aikar, coletas de lixo completas, memória que sobra depois da coleta, threads de CPU, e se a máquina está sem memória ou ocupada com outras coisas.
- Configurações. view-distance e simulation-distance no server.properties, limites de spawn no bukkit.yml, activation ranges de entidades no spigot.yml, e as opções do Paper e do Purpur para explosões, redstone, colisões, spawners, funis, suportes de armadura e aldeões. Cada item diz qual arquivo e qual chave mudar.
- Plugins. O tempo que cada plugin leva na thread principal, plugins que costumam dar problema (ClearLag, PlugMan, stackers de mobs), e o chunk com mais entidades, com um comando /tp para ir até lá.
Os itens vão do que corrigir primeiro até as dicas opcionais. Enquanto o servidor dá conta, as mudanças de configuração aparecem como dicas: elas liberam um tempo de que você ainda não precisa.
Como fazer um perfil do spark
- Rode
/spark profiler startno console ou no jogo. No Paper e no Purpur 1.21 ou mais recentes, o spark já vem embutido. - Deixe gravando por pelo menos 5 minutos num horário normal, com jogadores online. Um perfil de um servidor vazio só mostra um servidor parado.
- Rode
/spark profiler stop. O spark envia o perfil e mostra um linkhttps://spark.lucko.me/…. - Cole o link acima. A análise começa sozinha.
Para lag que vem em picos em vez de o tempo todo, grave só os ticks lentos: /spark profiler start --only-ticks-over 100 guarda os ticks que levaram mais de 100 ms e ignora o resto.
TPS e MSPT
O servidor roda o mundo em ticks, 20 por segundo, então cada tick tem 50 ms. O MSPT (milissegundos por tick) é quanto um tick levou de verdade. Enquanto ele fica abaixo de 50, o servidor mantém 20 de TPS e tem tempo de sobra. Quando os ticks demoram mais, o TPS cai, e mobs, redstone e plantações ficam mais lentos para todo mundo.
| MSPT | O que significa |
|---|---|
| Abaixo de 30 ms | Bastante espaço para os momentos de pico |
| 30 – 45 ms | Bom, mas com pouca margem |
| 45 – 50 ms | No limite: qualquer pico aparece |
| Acima de 50 ms | O servidor fica para trás e o TPS cai |
O analisador olha o percentil 95, o tempo abaixo do qual ficaram 95 % dos ticks. Uma média esconde os ticks lentos; o percentil 95 não.
Lendo o tempo por plugin
A lista de plugins soma o tempo gasto dentro do código de cada plugin na thread principal e divide pelos ticks gravados, então ela é lida em ms por tick, contra os 50 ms que cada tick tem. Um plugin que leva 5 ms por tick usa sozinho um décimo do orçamento. O tempo que um plugin gasta chamando outro plugin conta para o que foi chamado, do mesmo jeito que o visualizador do próprio spark conta.
O que sobra depois dos plugins é o próprio jogo: entidades, chunks, redstone e jogadores. Os itens de configuração miram essa parte. Para ver exatamente qual tarefa de um plugin toma o tempo, abra o perfil no visualizador do spark e mude para a visualização Sources.
As mudanças que costumam ajudar mais
- Diminua a simulation-distance para 5 ou 6, e a view-distance para uns 8. A simulation distance decide quanto do mundo recebe tick em volta de cada jogador, então ela pesa em todo tick.
- Diminua as activation ranges de entidades no spigot.yml, para os mobs longe dos jogadores receberem tick menos vezes.
- Use as opções do Paper: optimize-explosions, a implementação de redstone ALTERNATE_CURRENT, max-entity-collisions em 2 e um tick rate de spawner de 2.
- Inicie o Java com as flags do Aikar e um heap que combine com o servidor. A calculadora de RAM escreve as duas coisas para você.
- Pré-gere o mundo com um plugin como o Chunky, para que chunks novos não sejam gerados enquanto o pessoal joga.
Mude uma coisa de cada vez e grave um perfil novo depois. Assim você sabe o que ajudou, e o que desfazer se uma farm parar de funcionar.
Seu perfil e a privacidade
O analisador roda no seu navegador: o perfil é baixado direto do spark.lucko.me e nunca passa pelo EndyStudio. Lembre que um perfil do spark inclui os arquivos de config do seu servidor (o spark esconde senhas, IPs e chaves parecidas), e que qualquer pessoa com o link pode abrir.