TestePt-Br
Guia de Otimização de Servidores Minecraft
⚠️ Para quem usa Vanilla, Fabric ou Spigot (ou qualquer coisa abaixo de Paper):
Acesse o server.properties e altere a opção sync-chunk-writes para false.
Essa opção já é forçadamente false no Paper e seus forks, mas em outras implementações você precisa ajustar manualmente. Isso permite que o servidor salve chunks fora da thread principal, reduzindo a carga no tick loop principal.
Compatível com versão 1.21. Algumas recomendações ainda funcionam nas versões de 1.15 até 1.20.
Baseado neste guia original e outras fontes (todas estão linkadas no decorrer do texto).
Use o índice localizado acima (ao lado de README.md) para navegar facilmente pelo guia.
Introdução
Nunca existirá um guia com resultados perfeitos para todos. Cada servidor tem necessidades e limites próprios do que pode ou está disposto a sacrificar. O segredo está em ajustar cada opção conforme sua realidade.
Este guia serve para te ajudar a entender o impacto de cada configuração, e o que exatamente ela modifica. Se encontrar informações incorretas, sinta-se livre para abrir uma issue ou enviar um pull request com correções.
Preparação
JAR do Servidor
Sua escolha de software faz uma grande diferença no desempenho e nas possibilidades de API. Existem várias opções viáveis, mas algumas devem ser evitadas.
Top recomendações:
Paper – O mais popular, focado em desempenho e correção de bugs de jogabilidade.
Pufferfish – Fork do Paper com foco em desempenho ainda maior.
Purpur – Fork do Pufferfish, com mais recursos e liberdade de personalização.
Evite:
Qualquer JAR pago que prometa "async" – 99,99% de chance de ser golpe.
Bukkit / CraftBukkit / Spigot – Extremamente ultrapassados em desempenho.
Plugins ou softwares que ativam/desativam/recarregam plugins em tempo real. Veja a seção sobre isso.
Forks muito distantes do Purpur/Pufferfish – costumam ser instáveis e problemáticos.
Se quer mais desempenho, otimize seu servidor ou crie um fork privado confiável.
Pré-geração de Mapa (Map Pregen)
Com as otimizações de geração de chunks nos últimos anos, a pré-geração só é útil em CPUs muito limitadas ou single-threaded. Porém, ainda é comum ao usar plugins de mapas como Dynmap ou Pl3xMap.
Se ainda quiser pré-gerar, use um plugin como Chunky.
Defina um world border, senão os jogadores poderão gerar chunks fora da área.
Pré-gerar pode levar horas, dependendo do raio configurado.
Com Paper+, o TPS não será afetado por carregamento de chunks, mas a velocidade de carregamento será afetada se a CPU estiver sobrecarregada.
Cada mundo (overworld, nether e the end) tem seu próprio border.
O Nether é 8x menor que o Overworld (se não modificado por datapack), então ajuste corretamente ou os jogadores podem sair da borda.
⚠️ Use o comando vanilla /worldborder set [diâmetro] para evitar lag de lookup em mapas do tesouro e outros sistemas.
Configurações
Rede
[server.properties]
network-compression-threshold
Valor inicial recomendado: 256
Define o tamanho mínimo (em bytes) de um pacote para o servidor comprimir.
Maior valor: economiza CPU, mas usa mais banda.
Menor valor: ajuda clientes com internet fraca.
Valor
-1desativa a compressão.
Se seu servidor usa proxy ou está na mesma máquina (latência < 2ms), desativar a compressão (
-1) pode ser benéfico.
[purpur.yml]
use-alternate-keepalive
Valor inicial recomendado: true
Ativa o sistema de keepalive alternativo do Purpur. Ajuda jogadores com conexão instável a evitarem timeouts.
⚠️ Pode ser incompatível com TCPShield.
“Esse sistema envia pacotes a cada 1s e só desconecta se nenhum for respondido em 30s. Qualquer resposta mantém o jogador online.”
Fonte: https://purpurmc.org/docs/Configuration/#use-alternate-keepalive
Chunks
[server.properties]
simulation-distance
Valor inicial recomendado: 4
Distância em chunks ao redor do jogador onde o servidor irá executar ticks. Coisas como fornalhas, crescimento de plantas, etc.
Mantenha esse valor baixo (3–4), e use o
view-distancepara exibir mais chunks sem processá-los. Isso economiza recursos.
view-distance
Valor inicial recomendado: 7
Distância de visualização em chunks enviada ao cliente.
Semelhante ao no-tick-view-distance do Paper.
O total de chunks exibidos será o maior valor entre simulation e view-distance. Exemplo:
simulation-distance: 4,view-distance: 12→ jogador verá 12 chunks.
[spigot.yml]
view-distance
Valor recomendado: default
Se definido como qualquer coisa diferente de default, substitui o valor do server.properties.
Deixe em
defaultpara gerenciar tudo em um único lugar.
[paper-world configuration]
delay-chunk-unloads-by
Valor inicial recomendado: 10s
Define por quanto tempo um chunk permanece carregado após o jogador sair. Ajuda a evitar cargas/descarregas constantes de chunks.
Não exagere nesse tempo ou você pode ter muitos chunks ativos.
max-auto-save-chunks-per-tick
Valor inicial recomendado: 8
Espalha o salvamento de chunks ao longo do tempo. Pode ser aumentado em servidores com +30 jogadores.
Se o salvamento incremental não terminar a tempo, o Bukkit força salvamento completo, o que causa travamentos.
prevent-moving-into-unloaded-chunks
Valor inicial recomendado: true
Impede jogadores de entrarem em chunks descarregados, o que causaria carregamentos sincronizados e lag.
A chance disso acontecer aumenta quanto menor for sua
view-distance.
entity-per-chunk-save-limit
Valores iniciais recomendados:
Isso limita a quantidade salva de entidades por chunk, evitando salvar milhares de projéteis inúteis e reduzindo lag de IO.
🎯 Limite de Entidades Salvas
Arquivo:
pufferfish.ymlOpção:max-loads-per-projectileValor sugerido:8
Com essa opção, você pode limitar quantas entidades de determinado tipo podem ser salvas. É importante definir um limite para cada tipo de projétil para evitar problemas de desempenho e até crash ao carregar o servidor com muitos projéteis salvos. Você pode usar qualquer ID de entidade (veja a wiki do Minecraft para a lista). Essa configuração não foi feita para impedir os jogadores de criarem farms grandes de mobs.
🧟♂️ Mobs
Arquivo:
bukkit.yml
spawn-limits
spawn-limitsValores sugeridos:
A fórmula de limitação de mobs é: [quantidade de jogadores] × [limite de cada tipo]
Ou seja, quanto menores os valores, menos mobs vão aparecer.
Se per-player-mob-spawn estiver ativado, os mobs são distribuídos de forma mais equilibrada entre os jogadores.
Você pode usar valores bem baixos como 20 se configurar o mob-spawn-range corretamente (veja abaixo).
ticks-per
ticks-perValores sugeridos:
Define com que frequência (em ticks) o servidor tenta spawnar determinados mobs. Mobs aquáticos e do tipo ambiente não precisam spawnar a todo momento, já que morrem com menos frequência. Para monstros, valores maiores geralmente não afetam farms, e aliviam a carga em áreas onde o spawn está desativado.
Arquivo:
spigot.yml
mob-spawn-range
mob-spawn-rangeValor sugerido:
3
Determina quantos chunks ao redor do jogador serão considerados para o spawn de mobs.
Reduzir esse valor cria a impressão de que há mais mobs por jogador.
Deve ser menor ou igual à sua simulation-distance, e nunca maior que hard despawn range ÷ 16.
entity-activation-range
entity-activation-rangeValores sugeridos:
Define a distância em que uma entidade começa a ser "ativada" (realiza ações). Reduzir melhora o desempenho, mas mobs podem ficar parados até o jogador se aproximar. Se for muito baixo, pode quebrar farms (especialmente de ferro).
entity-tracking-range
entity-tracking-rangeValores sugeridos:
Define a distância máxima de visibilidade das entidades para o jogador.
Se estiver muito baixo, mobs parecerão surgir do nada.
Geralmente deve ser maior que entity-activation-range.
tick-inactive-villagers
tick-inactive-villagersValor sugerido:
false
Se ativado, aldeões continuam funcionando mesmo fora da faixa de ativação. Desativar melhora desempenho, mas pode afetar farms de ferro e reabastecimento de trocas.
nerf-spawner-mobs
nerf-spawner-mobsValor sugerido:
true
Mobs gerados por spawners ficam sem IA, ou seja, não se movem nem atacam.
Se quiser que pulem na água, use spawner-nerfed-mobs-should-jump: true em paper-world configuration.
Arquivo:
paper-world configuration
despawn-ranges
despawn-rangesValores sugeridos:
Controla a distância (em blocos) para os mobs desaparecerem automaticamente.
Fora do
hardrange: mob desaparece instantaneamente.Entre
softehard: chance aleatória de sumir. Regule ohardcom base na fórmula:(simulation-distance * 16) + 8
per-player-mob-spawns
per-player-mob-spawnsValor sugerido:
true
Faz o sistema de spawn de mobs considerar quantos mobs já existem perto de cada jogador. Ajuda a impedir que farms dominem o limite total de mobs. Traz uma experiência mais parecida com o singleplayer. Leve impacto no desempenho, mas compensa.
max-entity-collisions
max-entity-collisionsValor sugerido:
2
Controla quantas colisões uma entidade pode processar ao mesmo tempo.
0= nada pode empurrar ou ser empurrado2= suficiente para a maioria dos casos Nota: isso anula o gamerulemaxEntityCrammingse ele for maior que esse valor.
[paper-world-defaults.yml]
update-pathfinding-on-block-update
update-pathfinding-on-block-updateValor recomendado: false
Desativar isso reduz a quantidade de pathfinding feito, melhorando o desempenho. Em alguns casos, isso fará os mobs parecerem mais "lagados", pois eles atualizarão sua rota a cada 5 ticks (0.25 segundos).
fix-climbing-bypassing-cramming-rule
fix-climbing-bypassing-cramming-ruleValor recomendado: true
Corrige o problema de mobs não serem afetados pela regra de aglomeração (cramming) enquanto escalam, como aranhas. Evita que grandes quantidades fiquem acumuladas em espaços pequenos.
armor-stands.tick
armor-stands.tickValor recomendado: false
Pode ser desativado com segurança na maioria dos casos. Reative apenas se usar plugins que modificam armor stands e apresentar problemas. Impede que sejam afetados por água ou gravidade.
armor-stands.do-collision-entity-lookups
armor-stands.do-collision-entity-lookupsValor recomendado: false
Desativa colisões de armor stands. Útil se houver muitos no servidor e não houver necessidade de colisão.
tick-rates
tick-ratesValores recomendados:
Define com que frequência certos comportamentos e sensores são ativados em ticks. O acquirepoi é o mais pesado, por isso foi aumentado. Diminua se houver problemas com vila.
⚠️ Não recomendado alterar se o DAB do Pufferfish estiver ativado!
[pufferfish.yml]
dab.enabled
dab.enabledValor recomendado: true
DAB reduz a frequência de ticks de entidades com base na distância dos jogadores, de forma gradual. Melhora desempenho sem os cortes bruscos do EAR.
dab.max-tick-freq
dab.max-tick-freqValor recomendado: 20
Controla o tick mais lento possível para entidades longe dos jogadores. Aumentar melhora performance, mas pode quebrar farms de mobs.
dab.activation-dist-mod
dab.activation-dist-modValor recomendado: 7
Define a "inclinação" do gradiente de ativação do DAB. Valores menores ativam mais perto dos jogadores (mais performance, mas maior risco de bugs/farms quebradas).
enable-async-mob-spawning
enable-async-mob-spawningValor recomendado: true
Ativa a lógica assíncrona de spawn de mobs. Não faz o spawn realmente em paralelo, mas alivia carga da thread principal. Requer per-player-mob-spawns ativo no Paper.
enable-suffocation-optimization
enable-suffocation-optimizationValor recomendado: true
Otimiza a verificação de sufocamento, limitando-a ao tempo de dano. Quase imperceptível no jogo comum, útil para servidores com muitos mobs.
inactive-goal-selector-throttle
inactive-goal-selector-throttleValor recomendado: true
Reduz a frequência que mobs inativos atualizam seus objetivos. Passa de 1 tick para 20 ticks. Melhora performance com impacto mínimo no gameplay.
[purpur.yml]
zombie.aggressive-towards-villager-when-lagging
zombie.aggressive-towards-villager-when-laggingValor recomendado: false
Zumbis deixam de perseguir aldeões quando o servidor está com lag, conforme limiar definido em lagging-threshold.
entities-can-use-portals
entities-can-use-portalsValor recomendado: false
Impede que entidades (exceto o jogador) usem portais, evitando carregamento de chunks desnecessário. Entidades não mudarão de dimensão.
villager.lobotomize.enabled
villager.lobotomize.enabledValor recomendado: true
⚠️ Use apenas se aldeões causarem lag!
Remove a IA de aldeões que não conseguem encontrar caminho. Eles apenas reabastecem ofertas de tempos em tempos. Liberá-los reativa a IA.
villager.search-radius
villager.search-radiusValores recomendados:
Define o raio de busca por locais de trabalho e camas. Reduz drasticamente a carga com grandes quantidades de aldeões.
[spigot.yml]
merge-radius
merge-radiusValores recomendados:
Distância para juntar itens e orbes de XP. Reduz a quantidade de entidades no chão. Valores altos podem causar desaparecimento aparente e bugs em farms.
hopper-transfer
hopper-transferValor recomendado: 8
Tempo em ticks para um hopper transferir itens. Aumentar melhora performance mas pode quebrar sistemas de clock ou sorting.
hopper-check
hopper-checkValor recomendado: 8
Tempo em ticks para um hopper verificar itens acima ou no inventário superior. Impacta diretamente sistemas baseados em hoppers com água/clocks.
[paper-world configuration]
alt-item-despawn-rate
alt-item-despawn-rateExemplo de valores recomendados:
Permite definir tempo individual de despawn (em ticks) para itens jogados no chão. Substitui plugins de limpeza e funciona junto com merge-radius.
redstone-implementation
redstone-implementationValor recomendado: ALTERNATE_CURRENT
Substitui a lógica de redstone por uma mais otimizada baseada no mod Alternate Current. Melhora desempenho com pequenas inconsistências em sistemas extremamente técnicos.
hopper.disable-move-event
hopper.disable-move-eventValor recomendado: false
Desativa o InventoryMoveItemEvent. Só ative se souber que seus plugins não precisam dele (ex: plugins de proteção).
hopper.ignore-occluding-blocks
hopper.ignore-occluding-blocksValor recomendado: true
Faz com que hoppers ignorem blocos sólidos que normalmente bloqueariam containers (como minecart hopper sob areia). Pode quebrar farms específicas.
tick-rates.mob-spawner
tick-rates.mob-spawnerValor recomendado: 2
Controla com que frequência os spawners de mobs são atualizados. Valores mais altos diminuem a taxa de spawn, mas aliviam a performance.
⛏️ Desempenho de Spawners
Esta opção permite configurar com que frequência os spawners devem ser ativados. Valores mais altos reduzem o lag se houver muitos spawners, mas se estiver muito alto (em relação ao delay dos spawners), a taxa de spawn de mobs será reduzida.
💥 Explosões otimizadas
optimize-explosions: true
Substitui o algoritmo padrão de explosão por um mais rápido, com leve perda de precisão nos cálculos de dano. Normalmente, isso não é perceptível.
🗺️ Mapas do tesouro
treasure-maps.enabled: false
Gerar mapas do tesouro é extremamente custoso e pode travar o servidor se a estrutura estiver em chunk não gerado. Só ative se tiver pré-gerado o mundo e definido uma borda mundial do Vanilla.
treasure-maps.find-already-discoveredloot-tables: truevillager-trade: true
Esta opção define se os mapas recém-gerados podem apontar para estruturas já descobertas. Se deixar
false, o servidor pode travar ao tentar encontrar estruturas ainda não geradas.villager-tradese refere a mapas negociados com aldeões.loot-tablesse aplica a baús com loot dinâmico (masmorras, tesouros, etc).
🌱 Taxas de atualização do mundo
tick-rates.grass-spread: 4
Intervalo em ticks para espalhamento de grama ou micélio. Valor 4 é ideal para reduzir a frequência sem impacto visual perceptível.
tick-rates.container-update: 1
Intervalo em ticks entre atualizações de containers. Aumentar pode ajudar com travamentos causados por containers, mas pode causar desincronização (itens fantasmas).
🏹 Desaparecimento de flechas
non-player-arrow-despawn-rate: 20
Tempo (em ticks) para flechas disparadas por mobs desaparecerem após colidir. Jogadores não podem pegá-las, então
20(1 segundo) é ideal.
creative-arrow-despawn-rate: 20
Mesmo caso, mas para flechas disparadas por jogadores em modo criativo.
⚙️ [pufferfish.yml]
disable-method-profiler: true
Esta opção desativa o profiler adicional usado apenas em debug. Causa lag desnecessário em produção.
🐬 [purpur.yml]
dolphin.disable-treasure-searching: true
Evita que golfinhos façam busca de estruturas como mapas do tesouro.
teleport-if-outside-border: true
Teleporta o jogador para o spawn se ele sair da borda do mundo. Útil já que a borda vanilla pode ser burlada e o dano mitigado.
🔐 [paper-world configuration]
anti-xray.enabled: true
Esconde minérios de x-rayers. Impacta performance, mas ainda é mais leve que plugins de anti-xray. Recomendado.
nether-ceiling-void-damage-height: 127
Se maior que 0, jogadores acima dessa altura no Nether tomam dano como se estivessem no Void. Impede uso do teto do Nether. O valor ideal é
127.
☕ Java - Início do Servidor
O Minecraft 1.20.5+ requer Java 21 ou superior. Use Adoptium ou Amazon Corretto. JVMs alternativas como OpenJ9 ou GraalVM não são recomendadas.
Flags de inicialização otimizadas: 🔗
Aikar’s flags🔧 Gerador recomendado:flags.sh
Para melhorar performance com SIMD, adicione:
antes do
-jar. Isso acelera mapas de plugins como ImageOnMaps em até 8x.
🚫 Plugins Problemáticos
❌ Plugins que removem itens do chão
Inúteis.
merge-radiusealt-item-despawn-ratefazem isso com mais eficiência.
❌ Mob Stacker
Na maioria dos casos, gera mais lag do que ajuda, principalmente para mobs naturais. Só se justifica para spawners em massa.
❌ Plugins que ativam/desativam outros plugins
Extremamente perigosos. Podem corromper dados e causar crashes. O comando
/reloadsofre dos mesmos problemas — veja este post.
📊 Diagnóstico de Lag
/mspt
Mostra o tempo de processamento de ticks. Se os dois primeiros valores estiverem <50ms, o servidor está estável. O terceiro valor alto é normal ocasionalmente.
🔥 Spark
Plugin para profiling de CPU/RAM. Guia completo na wiki oficial. Tutorial de análise de lag: clique aqui
⏱️ Timings
Ferramenta básica de diagnóstico. Gere com
/timings paste. Prefira Spark para menor impacto. Tutoriais: 🎥 Como ler Timings - por Aikar
🧨 Exploits e Correções
Veja exploits e como corrigi-los neste repositório: 🔗 GitHub - Exploits e Fixes
Atualizado