Um servidor Minecraft calcula o mundo em ticks, 20 vezes por segundo. Se um tick demorar demasiado ou a memória RAM se esgotar, o servidor escreve avisos no registo ou, no pior dos casos, é interrompido. Cada secção abaixo explica uma destas mensagens: como a reconheces, quão grave é e o que podes fazer. Primeiro surgem as mensagens após as quais o servidor falha ou é encerrado, depois os avisos em que continua a funcionar.

Encontras a mensagem completa na Consola ou em Ficheiros, em logs/latest.log, e os relatórios de falha na pasta crash-reports/. Lê sempre também as linhas anteriores: muitas vezes é aí que está o que abrandou o servidor. Antes de alterares ficheiros de configuração ou do mundo, cria uma cópia de segurança em Cópias de segurança.

O servidor deixou de responder: encerramento pelo Watchdog

Este é o aspeto da mensagem:

The server has not responded for 25 seconds! Creating thread dump
A single server tick took <Seconds> seconds

O que está por trás disto: O Watchdog é um vigia que verifica se o servidor ainda está a trabalhar. Se um único tick demorar demasiado, o servidor é considerado bloqueado e o Watchdog encerra-o. Até lá, o Paper escreve mensagens intermédias como „has not responded for 25 seconds“, juntamente com um thread dump, um instantâneo do que o servidor está a fazer naquele momento. As causas mais comuns são pressão sobre a memória ou um plugin ou mod pesado.

Como resolver:

  1. Em logs/latest.log, lê as linhas anteriores à primeira mensagem do Watchdog. Se aí já existir outro erro ou Stopping server, esse erro é a verdadeira causa e o Watchdog é apenas a consequência.
  2. No thread dump, consulta as primeiras linhas por baixo de Server thread. O nome de um plugin ou mod nesse local indica o que ocupou o servidor por último.
  3. Verifica a memória RAM. Se no registo também aparecer OutOfMemoryError, a memória não é suficiente (secções mais abaixo).
  4. Atualiza ou remove o plugin encontrado em Plugins ou o mod em Mods e reinicia o servidor.

Mais detalhes: Resolver corretamente o „Can't keep up“ e o Watchdog Timeout

Memória esgotada: Java heap space

Este é o aspeto da mensagem:

java.lang.OutOfMemoryError: Java heap space
Exception in thread "<Thread>" java.lang.OutOfMemoryError: Java heap space

O que está por trás disto: O Java gere a memória do servidor numa área chamada heap. Essa área ficou cheia: para a carga atual não havia memória suficiente. Por isso, o servidor costuma falhar ou tornar-se instável. Os maiores consumidores de memória são normalmente muitos chunks carregados, modpacks grandes, muitos mobs e itens, e plugins com grandes volumes de dados.

Como resolver:

  1. Reinicia o servidor para voltar a ter um funcionamento estável.
  2. Calcula quanta memória RAM a tua configuração realmente precisa. Mais detalhes: Planear a memória RAM necessária para Minecraft
  3. Se o teu pacote não chegar, escolhe um com mais RAM em Definições e subscrição → Plano.
  4. Entretanto, reduz a carga, por exemplo a distância de visão view-distance no server.properties.

Bom saber: A thread em que a mensagem aparece não é automaticamente a responsável. Uma thread é um fio de execução paralelo, e esta limitou-se a ser a primeira a pedir memória quando já não havia nenhuma livre.

O servidor falhou: relatório de falha guardado

Este é o aspeto da mensagem:

This crash report has been saved to: crash-reports/crash-<Date>_<Time>-server.txt

O que está por trás disto: O servidor foi encerrado por um erro grave e escreveu um relatório de falha. A mensagem em si só indica onde esse relatório se encontra. A verdadeira causa, por exemplo um mod, um plugin, o mundo ou falta de memória RAM, está no ficheiro.

Como resolver:

  1. Em Ficheiros, abre a pasta crash-reports/ e, nela, o ficheiro indicado. O nome contém a data e a hora da falha.
  2. Lê a primeira secção: depois de Description: surge uma breve descrição, seguida da linha do erro e do stacktrace, ou seja, a lista dos pontos do programa que levaram ao erro.
  3. O nome do mod ou plugin aí indicado é o responsável. Atualiza-o em Mods ou Plugins, ou remove-o.
  4. Se aparecer OutOfMemoryError, a memória RAM não é suficiente. Escolhe mais RAM em Definições e subscrição → Plano.
  5. Inicia o servidor e acompanha a Consola até ele estar totalmente a funcionar.

Bom saber: Os relatórios de falha permanecem guardados. Apaga os relatórios já lidos para encontrares logo o mais recente da próxima vez. Para servidores com mods: Erros de mods em servidores Forge, NeoForge e Fabric

Erro no ciclo principal do jogo

Este é o aspeto da mensagem:

Exception in server tick loop
Caused by: java.lang.<ErrorType>: <Details>

O que está por trás disto: O ciclo principal calcula o mundo tick a tick. Uma exceção, ou seja, um erro de programa, chegou até este ciclo e perturbou-o. Nesse caso, o servidor costuma falhar e escreve um relatório de falha. A verdadeira causa está quase sempre na linha Caused by imediatamente a seguir.

Como resolver:

  1. Procura a mensagem em logs/latest.log ou no relatório mais recente em crash-reports/.
  2. Lê a linha Caused by logo por baixo. Se houver várias, a última costuma levar à raiz do problema.
  3. As linhas com at … por baixo indicam nomes de pacotes e de ficheiros. Assim reconheces o plugin ou o mod envolvido.
  4. Atualiza-o ou remove-o em Plugins ou Mods e reinicia o servidor.

Bom saber: Esta mensagem não é um problema de lag, mas um erro concreto. Mais memória RAM só ajuda se a linha Caused by indicar um OutOfMemoryError.

Mais detalhes: Resolver corretamente o „Can't keep up“ e o Watchdog Timeout

Memória no limite: GC overhead limit exceeded

Este é o aspeto da mensagem:

java.lang.OutOfMemoryError: GC overhead limit exceeded

O que está por trás disto: O Java limpa automaticamente a memória que já não é necessária. A isto chama-se Garbage Collection, abreviadamente GC. Esta mensagem significa: o Java passa quase todo o tempo a limpar e recupera cada vez menos memória. O heap, isto é, a memória RAM do Java, está praticamente cheio. O servidor quase não responde ou falha.

Como resolver:

  1. Reinicia o servidor.
  2. Calcula quanta memória RAM a tua configuração precisa. Mais detalhes: Planear a memória RAM necessária para Minecraft
  3. Se o teu pacote não chegar, escolhe mais RAM em Definições e subscrição → Plano.
  4. Reduz a carga de chunks e entidades: diminui a distância de visão view-distance no server.properties, reduz as grandes quintas de animais e limpa os itens espalhados pelo chão.

Bom saber: Um reinício só dá algum alívio. Se o consumo voltar a subir de forma constante até ao limite após cada reinício, apesar de a carga se manter igual, também pode ser um plugin ou mod a reter memória.

Não é possível criar mais threads: unable to create native thread

Este é o aspeto da mensagem:

java.lang.OutOfMemoryError: unable to create native thread

O que está por trás disto: Uma thread é um fio de execução paralelo. O Java quis iniciar mais uma e não conseguiu. Apesar de OutOfMemoryError constar no nome, isto não é prova de um heap do Java cheio. Normalmente, há demasiadas threads em simultâneo, foi atingido um limite de processos ou falta memória fora do heap. O servidor deixa então de conseguir iniciar novas tarefas e fica instável. Esta linha não revela qual plugin ou mod cria as threads.

Como resolver:

  1. Não contrates mais RAM de forma generalizada. Mais memória para o Java não resolve esta mensagem automaticamente.
  2. Em logs/latest.log, lê as linhas anteriores à mensagem: o que estava a decorrer na altura do erro, que plugins se manifestaram com mais frequência?
  3. Comprova o responsável durante a execução. Com spark profiler start --thread * na Consola, vês todas as threads em execução. Os nomes delas revelam muitas vezes o plugin ou o mod.
  4. Só quando um responsável estiver comprovado é que o atualizas em Plugins ou Mods, verificas as suas definições ou o removes.

Se não conseguires avançar, abre um ticket e indica a hora da mensagem. Sobre o spark: spark: encontrar e compreender o lag

O servidor não consegue acompanhar: «Can't keep up»

Assim aparece a mensagem:

Can't keep up! Is the server overloaded? Running 2014ms or 40 ticks behind

O que está por trás: O Minecraft calcula 20 ticks por segundo, pelo que cada tick pode demorar 50 milissegundos. Se os ticks demorarem mais, acumula-se um atraso, que a mensagem indica em milissegundos e ticks. O servidor continua a funcionar, mas de forma claramente mais lenta: blocos partidos voltam a aparecer e os mobs andam aos soluços. A causa costuma ser pressão sobre a memória ou o CPU. Mensagens isoladas no arranque ou ao gerar novas áreas são normais.

Como resolver:

  1. Mede a carga com spark tps na Consola. O que conta é o MSPT, os milissegundos por tick: até 50 ms está tudo saudável.
  2. Encontra o responsável com spark profiler start --timeout 120 e abre a ligação que o servidor mostra a seguir.
  3. Reduz a carga: diminui a distância de visão view-distance e a distância de simulação simulation-distance no server.properties, pré-gera o mundo e simplifica as farms grandes.
  4. Verifica se a memória RAM é suficiente (secção «Memória esgotada: Java heap space»).

Bom saber: o spark já vem incluído nos servidores Paper atuais; noutros servidores, instala-o como plugin ou mod.

Em detalhe: Resolver corretamente «Can't keep up» e o timeout do Watchdog

Diagnóstico do watchdog do Paper: o servidor bloqueou brevemente

Assim aparece a mensagem:

--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---
Server thread dump (Look for plugins here before reporting to Paper!):

O que está por trás: Quando a thread do servidor fica bloqueada durante alguns segundos, o Paper escreve um diagnóstico com um thread dump, ou seja, um instantâneo do que o servidor estava a fazer nesse momento. Como diz a primeira linha: isto não é um erro do Paper nem um crash, mas é um claro sinal de lag. Se o servidor recuperar, fica-se por esse bloqueio. Se chegar ao limite, segue-se a interrupção do watchdog descrita na primeira secção.

Como resolver:

  1. Lê as primeiras linhas do dump por baixo de Server thread dump. Se aparecer aí o nome de um plugin ou mod, é um forte indício do responsável.
  2. Atualiza esse plugin em Plugins ou remove-o para teste.
  3. Se os dumps se repetirem, verifica a memória RAM, os teus plugins e a distância de visão view-distance no server.properties.
  4. Dumps isolados, por exemplo no arranque ou ao guardar um mundo grande, podes apenas observar em vez de intervir de imediato.

Em detalhe: Resolver corretamente «Can't keep up» e o timeout do Watchdog

O servidor bloqueia ao carregar um chunk

Assim aparece a mensagem:

[ChunkTaskScheduler] Chunk wait task info below:
[ChunkTaskScheduler] Chunk holder: NewChunkHolder{world=<Mundo>, chunkX=<x>, chunkZ=<z>, …, currentGenStatus=minecraft:initialize_light, requestedGenStatus=minecraft:full, …}

O que está por trás: O Paper esperou mais do que o previsto pelo carregamento ou geração de um chunk, ou seja, uma secção do mundo de 16 × 16 blocos, e escreveu um diagnóstico. Nesse momento, o servidor engasga. O currentGenStatus mostra até onde o chunk chegou e o requestedGenStatus o objetivo. Normalmente é sobrecarga: geração do mundo, muitos jogadores afastados uns dos outros ou plugins lentos. Mais raramente, uma região está danificada.

Como resolver:

  1. Diminui a distância de visão view-distance no server.properties.
  2. Pré-gera o mundo para que os chunks não sejam criados só durante o jogo: Chunky: pré-gerar o mundo de Minecraft
  3. Verifica os plugins com spark profiler start --timeout 120 na Consola.
  4. Se o diagnóstico indicar sempre o mesmo mundo e as mesmas coordenadas de chunk, a região está danificada. Pára o servidor e restaura uma cópia em Cópias de segurança.

Bom saber: se as coordenadas forem invulgarmente grandes, alguém andou muito longe. Um limite de mundo com worldborder set <Diâmetro> resolve isso.

Aviso do watchdog do Paper: o servidor deixou de responder

Assim aparece a mensagem:

The server has stopped responding! This is (probably) not a Paper bug.
If you see a plugin in the Server thread dump below, then please report it to that author
If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes

O que está por trás: Estas linhas são um texto de aviso fixo que o Paper escreve antes do thread dump. A thread principal do servidor ficou sem responder durante mais tempo do que o limite do watchdog. O próprio texto indica os motivos típicos: um plugin sobrecarregado, operações muito grandes no mundo de uma só vez ou acessos HTTP e a bases de dados que bloqueiam a thread do servidor.

Como resolver:

  1. Lê o thread dump por baixo do bloco. Se aparecer aí um plugin, atualiza-o, configura-o ou remove-o em Plugins.
  2. Se vires aí a gravação ou o processamento do mundo, divide as ações grandes, por exemplo com o WorldEdit, em passos mais pequenos.
  3. Se vires acessos HTTP ou MySQL, normalmente um plugin está à espera de um serviço externo ou de uma base de dados. Verifica os dados de ligação do mesmo.
  4. Aumenta o timeout-time no spigot.yml apenas de forma consciente. Como diz o aviso, estás a trocar o crash por longos bloqueios.
  5. Em caso de bloqueios repetidos, reduz a carga dos plugins e verifica a memória RAM.

Em detalhe: Resolver corretamente «Can't keep up» e o timeout do Watchdog

A tarefa de chunks do Paper falha com BootstrapMethodError

Assim aparece a mensagem:

[ca.spottedleaf.concurrentutil.executor.thread.BalancedPrioritisedThreadPool] Exception thrown from thread <Thread>
java.lang.BootstrapMethodError: bootstrap method initialization exception

O que está por trás: O Paper carrega e gera chunks em threads próprias, ou seja, linhas de execução paralelas ao jogo principal. Numa delas, o Java não conseguiu preparar um ponto de chamada no programa. Os motivos possíveis são um erro no Paper, uma extensão incompatível ou uma versão de Java não suportada. A mensagem, por si só, não aponta nenhuma destas causas.

Como resolver:

  1. Atualiza o Paper em Versão para uma build estável atual da tua versão de Minecraft.
  2. Usa uma versão de Java suportada por essa build: Que versão de Java precisa o teu servidor de Minecraft?
  3. Lê o stacktrace completo em logs/latest.log. Se uma linha Caused by indicar um plugin, atualiza-o em Plugins.
  4. Não substituas bibliotecas do servidor manualmente. Isso tende a causar novos erros.
  5. Se o erro se repetir após a atualização, comunica o stacktrace completo ao projeto Paper.

A tua mensagem não está aqui?

Lê a mensagem completa em logs/latest.log e, sobretudo, as linhas anteriores: a sobrecarga quase sempre tem um desencadeador que aparece antes do primeiro aviso. No stacktrace ou no thread dump, os nomes de pacotes, ou seja, os nomes de pastas separados por pontos, como com.<Entwickler>.<Plugin>, e os nomes de ficheiros, como <Plugin>.jar, revelam qual o plugin ou mod envolvido. Antes de alterares ficheiros de configuração, cria uma cópia de segurança em Cópias de segurança. Se não conseguires avançar, abre um ticket e indica a hora da mensagem.