4 votes

Drapeau PermGen Java idéal

J'ai un serveur FTB Unleashed 1.1.7 en cours d'exécution et j'ai obtenu l'erreur suivante dernièrement "java.lang.OutOfMemoryError: PermGen space".

D'après ce fil de discussion : Traitement de l'erreur "java.lang.OutOfMemoryError : Espace permGen". les drapeaux recommandés sont

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled ainsi que le paramètre MaxPermSize -XX:MaxPermSize=128M .

Quelle est la taille idéale de MaxPermSize ? L'augmentation de la Taille MaxPerm (256mb, 512mb) va-t-elle dégrader les performances ?

1voto

Mike Points 11

Bien que je sois d'accord dans une certaine mesure avec les réponses existantes, augmenter à -XX:MaxPermSize=512M aidera et même jusqu'à -XX:MaxPermSize=1G ne devrait pas faire de mal, en supposant que votre serveur dispose de cette quantité de RAM physique, un conseil concernant la taille totale du tas, qui est configuré en augmentant -Xmx=xGB .

En général, cela augmentera la mémoire disponible pour le programme, ce qui est une bonne chose, puisque la JVM (Java Virtual Machine, essentiellement le programme qui fait tourner votre serveur Minecraft) aura plus de mémoire pour y mettre des "trucs". À un certain point, il y aura cependant un grand inconvénient. Lorsque vous passez à des dizaines de gigaoctets, la JVM devient de plus en plus inefficace pour gérer autant de mémoire sans conseil.

Comme de plus en plus de mémoire est nécessaire, vous devez dire à la JVM à quoi exactement la mémoire est principalement utilisée (cela dépend du temps que vos objets java sont plutôt à courte ou longue durée de vie). Je ne suis pas sûr de la façon dont Minecraft gère cette mémoire, car je viens d'un autre domaine de Java (J2EE), mais plus la RAM totale est grande, plus vous devez adapter votre serveur aux besoins spécifiques de l'application.

Plus précisément, vous devrez régler le ramasseur d'ordures de manière à minimiser les pauses "stop-the-world" (c'est-à-dire lorsque votre serveur est complètement immobile et ne fait apparemment rien). Utilisation de -XX:+UseConcMarkSweepGC va beaucoup aider. Utilisation de -XX:CMSClassUnloadingEnabled ne fera qu'aider à garder votre PermGen ( -XX:MaxPermSize ) propre mais pas de garder votre tas global propre. Dans le premier cas, il y a littéralement des dizaines de paramètres à prendre en compte.

TL;DR :

Pour un très gros serveur, il y a beaucoup d'autres choses à régler que la simple fonction -XX:MaxPermSize . Un PermSize d'environ -XX:MaxPermSize=1G et un tas autour -Xmx=4G à -Xmx=6G devrait encore être assez sûr. Je n'irais pas beaucoup plus loin pour conserver les performances du serveur.

Bien entendu, la taille MaxPermSize + Xmx ne doit jamais être supérieure à la RAM installée dans votre ordinateur. Elle commencera à échanger des données, ce qui réduira les performances de quelques magnitudes.

0voto

MechanicalBanana Points 1140

Si vous exécutez le serveur à partir d'un ordinateur domestique, ou d'un serveur hôte qui utilise des PC individuels, l'augmentation de MaxPermSize fera tout le contraire d'une dégradation des performances, elle augmentera les performances du serveur de pas trop d'amélioration à une amélioration drastique, en fonction de ce que le PC est construit avec. La seule performance qui pourrait se dégrader est votre client personnel, si vous exécutez le serveur sur le même ordinateur.

0voto

Northstar1989 Points 29

D'après mon expérience (c'est anecdotique), mes serveurs FTB Ultimate (et maintenant TPPI) s'écroulent assez rapidement avec une taille maximale de 128. Je considère que 256 est le minimum pour les très gros packs comme Ultimate et TPPI. Je fais tourner mon client et mon serveur à 512, mais j'ai aussi beaucoup de mémoire à disposition (96 Go sur le serveur, 32 sur mon client).

Si vous êtes à court de mémoire, passez à au moins 256 et ça devrait aller. Il semble qu'à ce stade, vous n'ayez pas vraiment le choix. Si vous le pouvez, je vous recommande de passer à 512 Mo et il n'y aura pas d'impact négatif sur les performances, sauf si vous atteignez la limite de la mémoire disponible pour le système ou le processus (java).

0voto

L'option -XX:+CMSPermGenSweepingEnabled a été supprimé dans Java 6, il n'y a donc aucune raison d'inclure cette option. La nouvelle option -XX:CMSClassUnloadingEnabled remplace effectivement le CMSPermGenSweeping dans toutes les versions à partir de 6. Afin d'en tirer les avantages, vous devez également inclure l'option -XX:+UseConcMarkSweepGC .

En ce qui concerne -XX:MaxPermSize=128m Si vous disposez de suffisamment de mémoire, vous ne devriez pas avoir de problèmes de performances si vous passez à 256 ou 512 Mo. En ce qui concerne l'allocation normale de mémoire, pour essayer d'éviter les plantages, vous pouvez allouer votre mémoire maximale à java pour laisser un espace de "réserve" de mémoire. Par exemple, pour un serveur disposant de 8 Go de mémoire, vous pouvez lancer le programme avec les paramètres suivants -Xmx7G .

Exemples de drapeaux de lancement :

-Xmx7G -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC XX:+CMSClassUnloadingEnabled

0voto

Mac Points 1

Pour votre question, utilisez les arguments java -Xms1012M -Xmx4048 -XX:MaxPermSize=512M -XX:+UseConcMarkSweepGC XX:+CMSClassUnloadingEnabled

(à utiliser si vous disposez de 6 à 8 Go de mémoire vive).

Pour 3-6 GB's, utilisez ceci

-Xms512M -Xmx2024 -XX:MaxPermSize=256M -XX:+USeConcMarkSweepGC XX:+CMSClassUnloadingEnabled

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X