Minecraft15 gennaio 2026 1712 visualizzazioni

Ottimizzazione del server Minecraft: Guida Spigot, Paper, Purpur (1.20-1.21)

Ottimizzazione del server Minecraft: Guida Spigot, Paper, Purpur (1.20-1.21)

Ottimizzazione del server Minecraft
Guida completa Spigot, Paper e Purpur (1.20-1.21)

Le prestazioni di un server Minecraft si basano su una configurazione software e hardware adeguata. Questa guida è rivolta agli amministratori che utilizzano Spigot, Paper o fork simili come Purpur e Pufferfish, e copre le versioni 1.20.x a 1.21.x. Dettaglieremo le impostazioni essenziali dei file di configurazione (spigot.yml, paper.yml, bukkit.yml, purpur.yml), spiegheremo perché i valori predefiniti sono spesso inadeguati e mostreremo come aggiustamenti mirati migliorano il TPS, riducono il carico della CPU e stabilizzano il tuo server.

Questa guida include anche raccomandazioni per plugin utili, un confronto dei vantaggi di Purpur e Pufferfish rispetto a Paper e Spigot, oltre a consigli sulla configurazione di Java (versioni, flag JVM G1GC). Il contenuto è organizzato per sezioni per una consultazione rapida ed efficace.


Scegliere il software del server

Confronto delle soluzioni disponibili

Software Base Vantaggio principale Consigliato per
Spigot CraftBukkit Compatibilità storica dei plugin Piccoli server semplici
Paper Spigot Ottimizzazioni + opzioni avanzate Maggiore parte dei server
Pufferfish Paper Massima prestazione Server molto popolati
Purpur Pufferfish Personalizzazione avanzata Server che richiedono opzioni esotiche

Paper piuttosto che Spigot

Spigot e il suo predecessore CraftBukkit costituiscono la base storica dei server Bukkit, ma oggi sono in ritardo in termini di prestazioni rispetto a Paper. Quest'ultimo è un fork di Spigot che integra numerose ottimizzazioni e patch mantenendo una compatibilità totale con i plugin Spigot e Bukkit. Paper espone anche decine di opzioni di configurazione avanzate che consentono di affinare le prestazioni senza alterare significativamente il gameplay.

Pufferfish per la prestazione pura

Pufferfish è un fork di Paper apparso nel 2021, completamente orientato verso la prestazione. Integra numerosi patch avanzati mantenendo la compatibilità con l'API Paper.

Miglioramenti inclusi in Pufferfish:

Funzionalità Descrizione
Elaborazione asincrona Alcune entità vengono elaborate parzialmente in background
Sistema DAB Algoritmi di IA dei mob più veloci
Rendering delle mappe SIMD Ottimizzazione tramite istruzioni vettoriali
Gestione degli hopper Funzionamento più efficiente degli imbuto
Ottimizzazione ray tracing Calcoli delle linee di vista accelerati
Gestione della memoria Riduzione delle pause del garbage collector
Integrazione Sentry.io Segnalazione automatica degli errori del server
Profiler Flare Analisi avanzate che includono il profiling della memoria

La maggior parte di queste ottimizzazioni è trasparente per il gameplay. Quelle che potrebbero avere un impatto possono essere disattivate in pufferfish.yml. Se il tuo obiettivo è supportare un gran numero di giocatori con un carico elevato, Pufferfish rappresenta spesso la scelta migliore.

Nota: Esiste anche Pufferfish+, una versione commerciale ancora più ottimizzata con tracciamento delle entità e pathfinding completamente asincroni, destinata ai server molto grandi.

Purpur per la personalizzazione

Purpur è un fork di Paper orientato verso la personalizzazione avanzata. Tecnologicamente, include tutte le ottimizzazioni di Pufferfish ma non aggiunge guadagni di prestazione aggiuntivi propri. Tuttavia, offre centinaia di nuove opzioni di configurazione per regolare i meccanismi di gioco: possibilità di cavalcare alcuni mob, calamari volanti, sonno di un solo giocatore e molto altro.

Per impostazione predefinita, queste funzionalità aggiuntive sono disattivate e il server si comporta come un Paper/Pufferfish standard. Utilizza Purpur solo se hai realmente bisogno di queste opzioni di gameplay, poiché più patch significano potenzialmente più bug.

Cosa evitare

Da evitare Motivo
JAR "fatti in casa" oscuri o a pagamento 99% di possibilità di inefficacia o addirittura di danno
Server Vanilla puro Scarto di prestazioni notevole rispetto a Paper
Rimanere su Spigot Perdi le ottimizzazioni Paper disponibili gratuitamente

Configurazione bukkit.yml

Il file bukkit.yml gestisce in particolare i parametri di spawn delle entità passive e ostili. I valori predefiniti di Bukkit/Spigot sono calibrati per piccoli server poco popolati ma risultano eccessivi per un server survival con molti giocatori.

Limiti di spawn (spawn-limits)

Questi limiti definiscono il numero di mob che possono spawnare per giocatore. Per impostazione predefinita, un giocatore può avere fino a circa 70 mostri, 10 animali e 15 creature acquatiche intorno a lui, il che può rapidamente saturare il server di entità con più giocatori connessi.

Valori raccomandati:

Categoria Valore predefinito Valore raccomandato
Mostri 70 20 a 30
Animali 10 5
Creature acquatiche 15 2
Creature ambientali 15 1

Il calcolo interno moltiplica questi limiti per il numero di giocatori connessi. Riducendo questi numeri, diminuisci la densità di mob da gestire e allevi il carico del server.

Attenzione: Valori troppo bassi riducono la fauna e la difficoltà del gioco. Per un server survival "hardcore" o focalizzato sulle farm di mob, non scendere troppo in basso. Il valore di 30 mostri offre un buon compromesso se desideri mantenere l'azione.

Frequenze di spawn (ticks-per)

Queste impostazioni controllano la frequenza dei tentativi di spawn di nuove entità. Per impostazione predefinita, Minecraft cerca di far spawnare mostri a ogni tick (20 volte al secondo) e animali ogni 400 tick (circa 20 secondi).

Valori raccomandati:

Categoria Valore predefinito Valore raccomandato
monster-spawns 1 2 a 10
animal-spawns 400 400
water-spawns 1 400
ambient-spawns 1 400

Impostare monster-spawns a 2 significa tentare solo una volta ogni 2 tick. La differenza nel tasso di apparizione è impercettibile per i giocatori, ma il server gestisce due volte meno cicli di spawn. Per le categorie acquatiche e ambientali, intervalli di 400 tick o più sono perfettamente accettabili poiché queste creature raggiungono rapidamente il loro limite di popolazione.

Opzione complementare Paper

Paper offre l'opzione per-player-mob-spawns che distribuisce meglio gli spawn tra i giocatori piuttosto che riempire il limite di un solo giocatore prima di passare al successivo. Attivando questa opzione, puoi permetterti limiti più bassi senza privare i giocatori degli incontri: ogni giocatore avrà la sua giusta parte di mob intorno a sé.


Configurazione spigot.yml

Il file spigot.yml contiene diversi parametri chiave per controllare la portata di attività delle entità e la gestione degli oggetti a terra. I valori predefiniti cercano di riprodurre il comportamento in solitario, ma in multiplayer possono essere ridotti per risparmiare risorse.

Distanze di visualizzazione e simulazione

Parametro Descrizione Raccomandazione
view-distance Distanza di rendering dei chunk Lasciare su "default" in spigot.yml
simulation-distance Distanza di attività delle entità 4 chunk (server.properties o Paper)
view-distance (effettiva) Chunk inviati al client 7 a 10 chunk

Da Minecraft 1.18+, si consiglia di lasciare view-distance su "default" in spigot.yml e di utilizzare i parametri di distanza in server.properties o tramite Paper. Il trucco consiste nel definire una distanza di simulazione bassa (4 chunk) mantenendo una distanza di visualizzazione più alta (8 a 10 chunk). In questo modo, i giocatori vedono lontano ma il server calcola solo i dintorni vicini.

Raggio di spawn dei mob (mob-spawn-range)

Questo raggio in chunk determina a quale distanza dal giocatore i mob possono apparire. Impostato per impostazione predefinita a 8 chunk (128 blocchi), può essere ridotto per concentrare gli spawn.

Raccomandazione: Imposta questo parametro a 4 o 6 chunk se la tua distanza di simulazione è bassa. Assicurati che mob-spawn-range rimanga inferiore o uguale alla tua distanza di simulazione effettiva. Riducendo questo raggio, anche con limiti di spawn ridotti, i giocatori avranno l'impressione di un mondo vivo poiché i mob appariranno più vicino a loro.

Portata di attivazione delle entità (entity-activation-range)

È uno dei principali leve di prestazione. Definisce la distanza in blocchi a partire dalla quale le entità smettono di essere attive (la loro IA è "addormentata" finché nessun giocatore è vicino).

Valori raccomandati:

Categoria Valore predefinito Valore raccomandato
Mostri 32 24
Animali 32 16
Creature acquatiche 32 8
Villager 32 16
Mostri volanti (phantoms) 32 48
Raiders 32 48
Misc 16 8

Ridurre questi raggi allevia la CPU poiché le entità lontane non consumano più risorse. Tuttavia, valori troppo bassi possono rompere alcuni meccanismi. Ad esempio, le farm di ferro richiedono villager "attivi" in un certo raggio dai zombie.

Consiglio: Attiva anche tick-inactive-villagers: false affinché i villager si addormentino fuori dal campo del giocatore. Dalla 1.14, i villager hanno un impatto enorme sui tick quando sono attivi in massa.

Portata di tracciamento delle entità (entity-tracking-range)

Questo parametro definisce a quale distanza le entità vengono inviate al client. Può essere maggiore dell'activation range senza costi significativi per il server poiché influisce solo sull'invio dei dati ai giocatori.

Raccomandazione: Mantieni i tracking ranges leggermente superiori agli activation ranges per evitare l'effetto di mob che "pop" improvvisamente sullo schermo. Valori di 48 per la maggior parte delle categorie (eccetto misc a 32) costituiscono un buon compromesso.

Fusione di oggetti e XP (merge-radius)

Tipo Valore predefinito Valore raccomandato
Oggetti 2.5 4 a 5
XP 3.0 6

Fondere le entità di oggetti a terra riduce notevolmente il numero di entità da gestire. Invece di 50 sfere di XP separate, ne hai solo una o due più grandi. Non aumentare troppo questi raggi poiché gli oggetti potrebbero "teletrasportarsi" da un blocco all'altro o attraversare i muri per unirsi.

Consiglio: Paper offre l'opzione fix-items-merging-through-walls per impedire questo comportamento se ingrandisci molto il raggio di fusione.

Durata di vita delle entità a terra

Parametro Valore predefinito Valore raccomandato
arrow-despawn-rate 1200 ticks (1 min) 300 ticks (15 sec)
item-despawn-rate 6000 ticks (5 min) 4000 ticks (3 min)

Le frecce scoccate verranno pulite più rapidamente, evitando la loro accumulazione invisibile. Per gli oggetti, 3 minuti sono più che sufficienti affinché un giocatore raccolga i suoi drop.

Nota Paper: L'opzione alt-item-despawn-rate consente di definire un tempo di despawn specifico per alcuni oggetti (cobble, netherrack, ghiaia). Questo può sostituire vantaggiosamente un plugin di clearlag.

Altri parametri importanti

Parametro Valore raccomandato Descrizione
nerf-spawner-mobs true I mob degli spawner non hanno più IA fino a essere colpiti
save-user-cache-on-stop-only true La cache utenti viene salvata solo all'arresto
max-tick-time (tile e entity) 1000 Disattiva quasi totalmente il limitatore di tick

nerf-spawner-mobs: Se il tuo server ha molte farm di spawner, è un enorme guadagno di prestazione. I mostri "nerfati" non hanno praticamente alcun costo CPU e aspettano semplicemente di essere uccisi.

max-tick-time: Impostando 1000ms, disattivi il sistema di guardia che può causare comportamenti bizzarri (entità o macchine redstone che saltano cicli). Il server cercherà sempre di calcolare tutto come previsto, anche se ciò lo porta a un TPS inferiore a 20.


Configurazione paper.yml

Paper e i suoi fork dispongono di configurazioni aggiuntive rispetto a Spigot. Queste opzioni sono spesso miglioramenti disattivati per impostazione predefinita per mantenere il comportamento vanilla, ma una volta attivate aumentano notevolmente le prestazioni.

Ottimizzazioni del motore di gioco

Redstone ottimizzata

Opzione Valore Descrizione
use-faster-eigencraft-redstone true Attiva l'algoritmo EigenCraft
redstone-implementation ALTERNATE_CURRENT Alternativa a seconda della versione

Questo nuovo motore riduce gli aggiornamenti redstone ridondanti e migliora notevolmente le prestazioni dei circuiti complessi senza cambiare il loro funzionamento osservabile.

Esplosioni ottimizzate

Opzione Valore Descrizione
optimize-explosions true Algoritmo ottimizzato per TNT e creepers

L'algoritmo calcola le aree di effetto più rapidamente con una perdita di precisione impercettibile per i giocatori.

Anti-Xray integrato

Opzione Valore Descrizione
anti-xray.enabled true Attiva la protezione
anti-xray.engine-mode 2 Modalità di offuscamento raccomandata

L'anti-xray di Paper è molto più performante rispetto ai plugin tradizionali. Offusca i blocchi di minerali non scoperti sostituendo temporaneamente il loro aspetto nei chunk inviati. Non utilizzare mai un plugin anti-xray di terze parti su Paper.

Gestione delle entità e dei mob

Collisioni ridotte

Opzione Valore predefinito Valore raccomandato
max-entity-collisions 8 2

In un grande gruppo di mob, ogni entità si occuperà solo di 2 collisioni alla volta invece di 8, riducendo l'esplosione combinatoria di calcoli.

Spawn per giocatore

Opzione Valore raccomandato
per-player-mob-spawns true

Il server distribuisce equamente il mobcap globale tra i giocatori, evitando che un giocatore isolato monopolizzi tutti gli spawn ostili.

Ottimizzazione degli hopper

Gli imbuto sono noti per essere uno dei peggiori nemici del TPS poiché effettuano controlli costanti.

Opzione Valore Condizione
hopper.disable-move-event true Solo se nessun plugin ascolta InventoryMoveItemEvent
hopper-transfer (spigot.yml) 8 Valore predefinito accettabile
hopper-check (spigot.yml) 8 Invece di 1 per impostazione predefinita
hopper.ignore-occluding-blocks true Disattiva un comportamento vanilla poco utilizzato

Disattivando disable-move-event, eviti che il server crei un evento a ogni movimento di oggetto in un hopper. È un enorme guadagno di prestazione sui server pieni di circuiti di smistamento.

Attenzione: Se utilizzi plugin di protezione delle casse o di registrazione degli oggetti spostati, non disattivare questa opzione.

Ottimizzazioni dei villager

Opzione Valore Descrizione
tick-inactive-villagers false Gli abitanti dei villaggi si addormentano al di fuori del campo del giocatore
villager.lobotomize (Purpur) true Rimuove l'IA degli abitanti dei villaggi troppo lontani dal loro obiettivo
villager.search-radius.* (Purpur) 16 Riduce i raggi di ricerca di letto/lavoro

Opzioni varie Purpur

Opzione Valore Descrizione
zombie.aggressive-towards-villager-when-lagging false Gli zombie smettono di inseguire gli abitanti dei villaggi in caso di lag
entities-can-use-portals false Impedisce ai mob di attraversare i portali
use-alternate-keepalive true Evita i timeout dei giocatori lenti

Caricamento dei chunk e mondo

Protezione contro i chunk non caricati

Opzione Valore raccomandato
prevent-moving-into-unloaded-chunks true

Questa opzione impedisce che un giocatore troppo veloce (ad esempio in elytra) entri in un chunk non ancora generato, il che provocherebbe un caricamento sincrono molto costoso che potrebbe bloccare il server.

Ritardo di scarico

Opzione Valore raccomandato
delay-chunk-unloads-by 10s

Se un giocatore fa un rapido andata e ritorno, il server non caricherà/scaricherà continuamente gli stessi chunk. Questo evita operazioni IO/CPU ripetute.

Mappe del tesoro

Opzione Valore Descrizione
treasure-maps.enabled false Disattiva completamente le mappe del tesoro
treasure-maps.find-already-discovered true Le mappe puntano verso strutture già scoperte

Le mappe del tesoro possono causare enormi picchi di lag se cercano strutture molto lontane. Se le conservi, assicurati di avere un worldborder e idealmente di aver pregenerato l'interno.

Pregenerazione del mondo

Da versioni 1.18+, Mojang ha ottimizzato la generazione del terreno e il caricamento asincrono. La pregenerazione non è più indispensabile tranne che su CPU molto lente. Tuttavia, per un lancio del server, puoi utilizzare un plugin come Chunky per pregenerare l'interno del tuo worldborder.

Consiglio : Posiziona un worldborder su ciascuno dei tuoi mondi (Mondo, Nether, End) per evitare che i giocatori partano all'infinito a generare terreno inutilmente. Il border del Nether deve essere 8 volte più piccolo proporzionalmente.


Plugin di performance raccomandati

Tabella riepilogativa

Plugin Funzione Indispensabile
Spark Profiler CPU e memoria ✅ Sì
Timings (integrato) Rapporto delle attività pesanti ✅ Sì
FarmLimiter/FarmControl Limita i raggruppamenti di entità Secondo necessità
Chunky Pregenerazione del mondo Secondo necessità
VillagerOptimizer Riduce la frequenza delle attività degli abitanti dei villaggi Secondo necessità
ClearLag Pulizia periodica delle entità ⚠️ Cerotto

Spark

Indispensabile per profilare il proprio server. Spark consente di registrare profili di performance CPU e memoria in tempo reale.

Comandi utili :

Comando Funzione
/spark profiler Avvia la registrazione
/spark profiler --stop Ferma e genera il rapporto
/spark tps Mostra il TPS attuale
/spark health Stato di salute del server
/spark gc Informazioni sul garbage collector
/spark profiler --memory Traccia le perdite di memoria

È lo strumento perfetto per identificare la causa dei tuoi picchi di lag: scoprire che un certo tipo di mob o una funzione di un plugin monopolizza il 40% del tempo di tick.

Timings (integrato Paper/Spigot)

Il comando /timings report genera un rapporto delle attività più pesanti dall'ultimo reset. Paper migliora notevolmente questo strumento rispetto a Spigot, fornendo grafici di carico e il dettaglio degli eventi più costosi.

FarmLimiter / FarmControl

Questo tipo di plugin monitora e limita la dimensione dei raggruppamenti di entità nelle fattorie AFK. Un problema comune: i giocatori creano enormi fattorie di mob o 500 mucche in un recinto minuscolo.

Funzionamento : Oltre una soglia (ad esempio 30 mob dello stesso tipo in un raggio dato), i nuovi spawn sono bloccati o i mob in eccesso vengono rimossi progressivamente.

ClearLag

Plugin noto che pulisce periodicamente le entità a terra e i mob in eccesso.

Avviso : ClearLag può risolvere temporaneamente un sovraccarico, ma è più un cerotto che una soluzione duratura. Configurare bene i despawn e i merge degli oggetti rende spesso ClearLag superfluo. Inoltre, ClearLag stesso consuma risorse per scansionare regolarmente tutte le entità.

Chunky

Plugin di pregenerazione del mondo semplice e performante. Definisci un raggio o dei confini e riempie progressivamente tutti i chunk. Funziona in modo asincrono per non far crollare il tuo server durante l'operazione.

VillagerOptimizer

Se i tuoi abitanti dei villaggi rimangono un problema nonostante le regolazioni, questo plugin riduce la frequenza delle loro attività costose (ricerca di letto, pathfinding). È simile alle regolazioni Purpur ma utilizzabile su Spigot/Paper.

Cosa evitare

Da evitare Motivo
Plugin "miracolosi" che promettono multithreading 99% inefficaci o pericolosi
Comando /reload in produzione Provoca perdite di memoria e crash
Caricare/scaricare plugin a caldo Incoerenze e instabilità

Preferisci sempre un riavvio pulito del server dopo aver aggiunto o rimosso plugin.


Configurazione Java e JVM

Ottimizzare Minecraft non si ferma alle configurazioni del gioco: anche l'ambiente di esecuzione Java e le risorse allocate sono importanti.

Versione di Java richiesta

Versione Minecraft Versione Java minima
1.17 e precedenti Java 8 o 11
1.18 a 1.20.4 Java 17
1.20.5 e superiori Java 21

Evita Java 8 o 11 sui server moderni. I miglioramenti del linguaggio e del garbage collector in Java 17/21 portano a guadagni di performance e stabilità non trascurabili.

Configurazione del Garbage Collector

Minecraft server utilizza intensivamente la memoria, generando molti oggetti temporanei. Una cattiva configurazione del GC può provocare pause di diverse centinaia di millisecondi.

Principi raccomandati :

Principio Raccomandazione
RAM sufficiente 8 GB per un server classico di 50 giocatori
Xms = Xmx Definire lo stesso valore per heap min e max
Garbage Collector G1GC (predefinito su Java 17+)
Generatore di flag Utilizzare flags.sh per ottenere i flag ottimali

Esempio di riga di comando :

java -Xms8G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -jar server.jar nogui

Consiglio : Utilizza il generatore di flag su flags.sh che fornisce automaticamente la riga di comando adeguata in base alla tua versione di Java e alla RAM da allocare.

Monitoraggio del GC

Il comando /spark gc o alcuni timings possono indicarti la percentuale di tempo trascorso in GC. Idealmente, questo dovrebbe rimanere basso (inferiore al 5%). Se noti pause frequenti, aumenta la RAM o diagnostica una possibile perdita di memoria.

JVM alternative

JVM Raccomandazione
OpenJ9 ⚠️ Non supportata ufficialmente
GraalVM ⚠️ Non supportata ufficialmente
HotSpot (standard) ✅ Raccomandata

Sebbene esistano JVM alternative, Paper e Spigot non le supportano ufficialmente e possono causare problemi imprevedibili.

Consigli di sistema

Componente Raccomandazione
CPU Privilegiare la frequenza al numero di core
Storage SSD/NVMe per il mondo
network-compression-threshold 256 (predefinito) o 512 per server con 100+ giocatori

Minecraft è essenzialmente monothread. La frequenza e l'IPC del processore prevalgono quindi sul numero di core.


Conclusione e raccomandazioni

Applicando le raccomandazioni di questa guida, otterrai un server notevolmente più stabile e performante, in grado di mantenere 20 TPS in situazioni in cui la configurazione predefinita avrebbe vacillato.

Riepilogo dei punti chiave

Area Azione prioritaria
Software server Passare a Paper o a un fork ottimizzato
Distanze Ridurre simulation-distance e activation ranges
Spawns Diminuisci i limiti e aumenta gli intervalli
Entità Attivare nerf-spawner-mobs e tick-inactive-villagers: false
Redstone Attivare l'algoritmo alternativo Paper
Hoppers Aumentare hopper-check e disattivare move-event se possibile
Monitoraggio Utilizzare Spark regolarmente
Java Utilizzare Java 17/21 con flag G1GC ottimizzati

Buone pratiche continue

Monitora costantemente : Utilizza Spark per identificare le fonti di lag. L'ottimizzazione è un processo continuo poiché ogni nuova fattoria o plugin aggiunto può introdurre un punto debole.

Imponi dei limiti : Non lasciare che i giocatori facciano qualsiasi cosa a scapito del server. Annuncia chiaramente le tue regole sulle entità e utilizza strumenti per farle rispettare automaticamente.

Accetta i compromessi : Un server 100% vanilla a livello di comportamento e 100% fluido non esiste per un carico elevato. È meglio avere abitanti dei villaggi un po' meno "intelligenti" o uno spawn di 200 abitanti dei villaggi che paralizza tutto? La domanda ha una risposta rapida.

Aggiorna in modo intelligente : Tieni aggiornati i tuoi software (Paper, Purpur) poiché spesso integrano nuove ottimizzazioni. Leggi i changelog e rimani informato sulle evoluzioni come Folia, il futuro server multi-threaded di Paper.

Ogni server è unico. Questa guida ti fornisce una base solida da perfezionare: testa progressivamente le modifiche (idealmente una alla volta), misura l'impatto tramite Spark o timings e regola in base alle tue osservazioni.


Per testare queste ottimizzazioni su un'infrastruttura performante, scopri le nostre offerte di server Minecraft gratuiti e osserva la differenza in condizioni reali!

Hai bisogno di un server Minecraft?

Scopri le nostre offerte di hosting Minecraft a partire da 9,98€/mese con installazione automatica delle mod.

Vedi le offerte