Aller au contenu

Wiki

Révision #390

Enregistrée le 14 août 2026 à 23:24

Auteur: vyrriox Type: Création « Nouvelle page serveur prive: arguments JVM, RAM et flags Aikar expliques a partir du serverpack. »
Cette révision #390

Les arguments JVM et la RAM

Les arguments JVM, ce sont les options passées à Java au démarrage du serveur. Sur un pack de plus de quatre cents mods comme Arcadia, ils font la différence entre un serveur qui tient vingt joueurs et un serveur qui se fige toutes les trente secondes. Bonne nouvelle: le serverpack arrive déjà réglé. Cette page t'explique ce que fait chaque ligne, et surtout ce qu'il ne faut pas toucher.

Où vivent les arguments

Tout se trouve dans le fichier user_jvm_args.txt, à la racine du serveur. Les scripts de lancement le passent à Java avec la syntaxe @user_jvm_args.txt, puis ajoutent les arguments propres à NeoForge. Concrètement, tu n'as jamais besoin de taper une longue commande java à la main: tu édites ce fichier avec un éditeur de texte, tu relances, c'est tout.

Les lignes qui commencent par un dièse
Ce sont des commentaires, Java les ignore. Tu peux donc désactiver une option en ajoutant un dièse devant, sans la supprimer. Pratique pour tester.

La RAM, la seule chose que tu dois vraiment régler

Deux lignes commandent la mémoire:

  • -Xms définit la mémoire allouée au démarrage.
  • -Xmx définit la mémoire maximale.

Sur un serveur Minecraft, ces deux valeurs doivent être identiques. Java réserve alors tout d'un coup et ne passe pas son temps à agrandir puis rétrécir son tas, ce qui provoque des à coups. Le pack est livré avec 16 384 Mo sur les deux lignes.

RAM de la machineÀ mettre dans Xms et XmxPourquoi
16 Go10240MIl faut laisser 6 Go au système et au reste
24 Go16384MLe point d'équilibre pour ce pack
32 Go et plus16384MMonter plus haut dégrade les performances
Plus de RAM n'est pas mieux
Passé un certain point, agrandir le tas rallonge les pauses du ramasse miettes: il a plus de mémoire à parcourir, donc chaque nettoyage prend plus de temps et le serveur se fige plus longtemps. Un serveur à 16 Go bien réglé tourne mieux qu'un serveur à 32 Go mal réglé. Et n'alloue jamais toute la RAM de la machine: le système, les sauvegardes et le réseau en ont besoin.

Le ramasse miettes et les flags Aikar

Le reste du fichier configure G1GC, le ramasse miettes de Java. Les valeurs viennent des flags Aikar, la référence dans le monde des serveurs Minecraft. Voici ce que font les principales:

ArgumentRôle
-XX:+UseG1GCActive G1, le ramasse miettes qui découpe le travail en petites pauses plutôt qu'en longs blocages
-XX:MaxGCPauseMillis=200Demande à G1 de viser des pauses de 200 ms maximum
-XX:+ParallelRefProcEnabledTraite les références en parallèle, gain net avec beaucoup de mods
-XX:+AlwaysPreTouchTouche toute la mémoire au démarrage. Le lancement est plus lent, la suite est plus régulière
-XX:+DisableExplicitGCEmpêche un mod mal écrit de déclencher un nettoyage complet à la main
-XX:+UseStringDeduplicationFusionne les chaînes de caractères identiques en mémoire, utile avec des milliers de recettes
-XX:G1NewSizePercent=30 et G1MaxNewSizePercent=40Agrandissent la zone des objets jeunes. Minecraft en crée énormément et les jette aussitôt
-XX:G1HeapRegionSize=8MTaille des régions du tas, adaptée à un gros tas
-XX:InitiatingHeapOccupancyPercent=15Lance le nettoyage tôt, avant que le tas ne sature
-XX:MaxTenuringThreshold=1Promeut vite les objets survivants, ce qui limite les copies inutiles
-XX:+PerfDisableSharedMemÉvite les blocages disque causés par le fichier de statistiques de la JVM

Deux lignes concernent le Metaspace, la zone où Java range les classes: -XX:MetaspaceSize=256M et -XX:MaxMetaspaceSize=1024M. Avec plus de quatre cents mods, il faut de la marge, sinon Java passe son temps à redimensionner cette zone. Enfin, -Dlog4j2.configurationFile=log4j2.xml impose la configuration de journalisation fournie avec le pack, et -Dusing.aikars.flags sert uniquement de marqueur pour les outils de supervision.

La variante GraalVM

Le pack fournit un second fichier, user_jvm_args_graalvm.txt, à n'utiliser que si tu as installé Oracle GraalVM 21. Il reprend les mêmes réglages mémoire et G1GC, puis ajoute le compilateur maison de GraalVM avec -XX:+EnableJVMCI, -XX:+UseJVMCICompiler et -XX:+EagerJVMCI, plus des options de compilation comme la vectorisation SIMD et le déroulage partiel de boucles. On y trouve aussi -XX:+UseTransparentHugePages, qui demande de grandes pages mémoire au système, et -XX:+EnableDynamicAgentLoading, nécessaire à certains profileurs.

Ne mélange jamais les deux fichiers. Les options graal ne servent à rien sous Temurin et peuvent empêcher Java de démarrer. La procédure de bascule complète est décrite dans Optimiser et diagnostiquer son serveur.

Les erreurs qu'on voit tout le temps

  • Xms et Xmx différents. C'est l'erreur classique. Mets les deux à la même valeur.
  • Allouer toute la RAM de la machine. Le système d'exploitation a besoin de mémoire pour le cache disque, qui accélère justement le chargement des chunks.
  • Doubler les arguments. Si ton hébergeur passe déjà un -Xmx dans sa commande de démarrage, ne le remets pas dans le fichier: la dernière valeur gagne et tu ne sais plus laquelle s'applique.
  • Copier des flags trouvés au hasard. Beaucoup de listes qui circulent sont écrites pour Java 8 et cassent sous Java 21. Les options de l'ancien ramasse miettes CMS, par exemple, n'existent plus.
  • Se tromper de Java. Le pack tourne sous Java 21. Une version plus ancienne refuse simplement de charger NeoForge.

Vérifier que tes réglages sont bien pris

ModernFix, FerriteCore et Lithium, les mods d'optimisation inclus dans le pack

Le pack embarque déjà plusieurs mods qui allègent le serveur sans réglage de ta part: ModernFix accélère le démarrage et réduit la mémoire, FerriteCore compresse les données de blocs, Lithium optimise la logique du jeu. Tes arguments JVM viennent en complément de ces mods, pas à leur place.

Au démarrage, le script affiche la version de Java avant de lancer le serveur: tu dois y voir Temurin 21 ou GraalVM 21 selon ton choix. Ensuite, en jeu ou en console, la commande spark health te donne la mémoire réellement utilisée, l'activité du ramasse miettes et les TPS. Si le tas monte au plafond puis redescend en permanence avec des pauses longues, c'est que ton allocation est trop juste pour le nombre de joueurs et de chunks chargés.

Chez un hébergeur, tu ne peux souvent régler que la quantité de RAM depuis le panneau, les flags étant imposés. Dans ce cas, applique la même règle: prends une offre où la RAM annoncée correspond au tas dont tu as besoin, et vérifie que l'hébergeur utilise bien Java 21.

Où continuer

Pour l'installation depuis zéro, suis Installer son serveur Arcadia, puis Lancer et configurer son serveur pour le fichier server.properties. Le diagnostic des lags et l'usage de Spark sont détaillés dans Optimiser et diagnostiquer son serveur, et la mise en service permanente dans Maintenir son serveur. Enfin, côté joueur, la RAM du client se règle dans Allouer de la RAM, ce qui n'a rien à voir avec le serveur.

Version actuelle

Arguments JVM et RAM

Les arguments JVM, ce sont les options passées à Java au démarrage du serveur. Sur un pack de plus de quatre cents mods comme Arcadia, ils font la différence entre un serveur qui tient vingt joueurs et un serveur qui se fige toutes les trente secondes. Bonne nouvelle: le serverpack arrive déjà réglé. Cette page t'explique ce que fait chaque ligne, et surtout ce qu'il ne faut pas toucher.

Où vivent les arguments

Tout se trouve dans le fichier user_jvm_args.txt, à la racine du serveur. Les scripts de lancement le passent à Java avec la syntaxe @user_jvm_args.txt, puis ajoutent les arguments propres à NeoForge. Concrètement, tu n'as jamais besoin de taper une longue commande java à la main: tu édites ce fichier avec un éditeur de texte, tu relances, c'est tout.

Les lignes qui commencent par un dièse
Ce sont des commentaires, Java les ignore. Tu peux donc désactiver une option en ajoutant un dièse devant, sans la supprimer. Pratique pour tester.

La RAM, la seule chose que tu dois vraiment régler

Deux lignes commandent la mémoire:

  • -Xms définit la mémoire allouée au démarrage.
  • -Xmx définit la mémoire maximale.

Sur un serveur Minecraft, ces deux valeurs doivent être identiques. Java réserve alors tout d'un coup et ne passe pas son temps à agrandir puis rétrécir son tas, ce qui provoque des à coups. Le pack est livré avec 16 384 Mo sur les deux lignes.

RAM de la machineÀ mettre dans Xms et XmxPourquoi
16 Go10240MIl faut laisser 6 Go au système et au reste
24 Go16384MLe point d'équilibre pour ce pack
32 Go et plus16384MMonter plus haut dégrade les performances
Plus de RAM n'est pas mieux
Passé un certain point, agrandir le tas rallonge les pauses du ramasse miettes: il a plus de mémoire à parcourir, donc chaque nettoyage prend plus de temps et le serveur se fige plus longtemps. Un serveur à 16 Go bien réglé tourne mieux qu'un serveur à 32 Go mal réglé. Et n'alloue jamais toute la RAM de la machine: le système, les sauvegardes et le réseau en ont besoin.

Le ramasse miettes et les flags Aikar

Le reste du fichier configure G1GC, le ramasse miettes de Java. Les valeurs viennent des flags Aikar, la référence dans le monde des serveurs Minecraft. Voici ce que font les principales:

ArgumentRôle
-XX:+UseG1GCActive G1, le ramasse miettes qui découpe le travail en petites pauses plutôt qu'en longs blocages
-XX:MaxGCPauseMillis=200Demande à G1 de viser des pauses de 200 ms maximum
-XX:+ParallelRefProcEnabledTraite les références en parallèle, gain net avec beaucoup de mods
-XX:+AlwaysPreTouchTouche toute la mémoire au démarrage. Le lancement est plus lent, la suite est plus régulière
-XX:+DisableExplicitGCEmpêche un mod mal écrit de déclencher un nettoyage complet à la main
-XX:+UseStringDeduplicationFusionne les chaînes de caractères identiques en mémoire, utile avec des milliers de recettes
-XX:G1NewSizePercent=30 et G1MaxNewSizePercent=40Agrandissent la zone des objets jeunes. Minecraft en crée énormément et les jette aussitôt
-XX:G1HeapRegionSize=8MTaille des régions du tas, adaptée à un gros tas
-XX:InitiatingHeapOccupancyPercent=15Lance le nettoyage tôt, avant que le tas ne sature
-XX:MaxTenuringThreshold=1Promeut vite les objets survivants, ce qui limite les copies inutiles
-XX:+PerfDisableSharedMemÉvite les blocages disque causés par le fichier de statistiques de la JVM

Deux lignes concernent le Metaspace, la zone où Java range les classes: -XX:MetaspaceSize=256M et -XX:MaxMetaspaceSize=1024M. Avec plus de quatre cents mods, il faut de la marge, sinon Java passe son temps à redimensionner cette zone. Enfin, -Dlog4j2.configurationFile=log4j2.xml impose la configuration de journalisation fournie avec le pack, et -Dusing.aikars.flags sert uniquement de marqueur pour les outils de supervision.

La variante GraalVM

Le pack fournit un second fichier, user_jvm_args_graalvm.txt, à n'utiliser que si tu as installé Oracle GraalVM 21. Il reprend les mêmes réglages mémoire et G1GC, puis ajoute le compilateur maison de GraalVM avec -XX:+EnableJVMCI, -XX:+UseJVMCICompiler et -XX:+EagerJVMCI, plus des options de compilation comme la vectorisation SIMD et le déroulage partiel de boucles. On y trouve aussi -XX:+UseTransparentHugePages, qui demande de grandes pages mémoire au système, et -XX:+EnableDynamicAgentLoading, nécessaire à certains profileurs.

Ne mélange jamais les deux fichiers. Les options graal ne servent à rien sous Temurin et peuvent empêcher Java de démarrer. La procédure de bascule complète est décrite dans Optimiser son serveur.

Les erreurs qu'on voit tout le temps

  • Xms et Xmx différents. C'est l'erreur classique. Mets les deux à la même valeur.
  • Allouer toute la RAM de la machine. Le système d'exploitation a besoin de mémoire pour le cache disque, qui accélère justement le chargement des chunks.
  • Doubler les arguments. Si ton hébergeur passe déjà un -Xmx dans sa commande de démarrage, ne le remets pas dans le fichier: la dernière valeur gagne et tu ne sais plus laquelle s'applique.
  • Copier des flags trouvés au hasard. Beaucoup de listes qui circulent sont écrites pour Java 8 et cassent sous Java 21. Les options de l'ancien ramasse miettes CMS, par exemple, n'existent plus.
  • Se tromper de Java. Le pack tourne sous Java 21. Une version plus ancienne refuse simplement de charger NeoForge.

Vérifier que tes réglages sont bien pris

ModernFix, FerriteCore et Lithium, les mods d'optimisation inclus dans le pack

Le pack embarque déjà plusieurs mods qui allègent le serveur sans réglage de ta part: ModernFix accélère le démarrage et réduit la mémoire, FerriteCore compresse les données de blocs, Lithium optimise la logique du jeu. Tes arguments JVM viennent en complément de ces mods, pas à leur place.

Au démarrage, le script affiche la version de Java avant de lancer le serveur: tu dois y voir Temurin 21 ou GraalVM 21 selon ton choix. Ensuite, en jeu ou en console, la commande spark health te donne la mémoire réellement utilisée, l'activité du ramasse miettes et les TPS. Si le tas monte au plafond puis redescend en permanence avec des pauses longues, c'est que ton allocation est trop juste pour le nombre de joueurs et de chunks chargés.

Chez un hébergeur, tu ne peux souvent régler que la quantité de RAM depuis le panneau, les flags étant imposés. Dans ce cas, applique la même règle: prends une offre où la RAM annoncée correspond au tas dont tu as besoin, et vérifie que l'hébergeur utilise bien Java 21.

Où continuer

Pour l'installation depuis zéro, suis Installer son serveur, puis Lancer et configurer son serveur pour le fichier server.properties. Le diagnostic des lags et l'usage de Spark sont détaillés dans Optimiser son serveur, et la mise en service permanente dans Maintenir son serveur. Si ton monde donne des signes de corruption, va voir Réparer un monde. Enfin, côté joueur, la RAM du client se règle dans Allouer de la RAM, ce qui n'a rien à voir avec le serveur.