Nous avons rencontré une erreur Java.lang.OutOfMemoryError: espace PermGen et en regardant les paramètres de la machine virtuelle Java de Tomcat, autres que le -Xms
et -Xmx
paramètres nous spécifions également -XX:MaxPermSize=128m
. Après un peu de profilage, je peux voir de temps en temps une récupération de place effectuée sur l'espace PermGen, ce qui lui évite de s'exécuter complètement.
Ma question est: autre que d'augmenter le -XX:MaxPermSize
quelle serait la différence si je spécifiais aussi -XX:PermSize
? Je sais que la mémoire totale serait alors Xmx + maxPermSize mais existe-t-il une autre raison pour laquelle -XX:PermSize
devrait pas être là quand -XX:MaxPermSize
est spécifié?
Veuillez partager si vous avez une expérience réelle de l'utilisation de ces paramètres JVM.
ps. La machine virtuelle Java est un serveur HotSpot 64 bits VM build 16.2-b04
-XX:PermSize
spécifie la taille initiale qui sera allouée au démarrage de la machine virtuelle Java. Si nécessaire, la machine virtuelle allouera jusqu’à -XX:MaxPermSize
.
En jouant avec les paramètres comme -XX:PermSize
et -Xms
vous pouvez régler les performances, par exemple, du démarrage de votre application. Je ne l'ai pas regardé récemment, mais il y a quelques années, la valeur par défaut de -Xms
était quelque chose comme 32 Mo (je pense), si votre application nécessitait beaucoup plus que cela déclencherait un certain nombre de cycles de remplissage de la mémoire - la récupération complète des ordures - augmenterait la mémoire, etc. jusqu'à ce qu'elle ait chargé tout ce dont elle avait besoin. Ce cycle peut être préjudiciable aux performances de démarrage. Par conséquent, l’attribution immédiate du numéro requis pourrait améliorer le démarrage.
Un cycle similaire est appliqué à la génération permanente. Donc, le réglage de ces paramètres peut améliorer le démarrage (entre autres).
WARNING La machine virtuelle Java dispose de beaucoup d'optimisation et d'intelligence lorsqu'il s'agit d'allouer de la mémoire, de diviser l'espace eden et les générations plus anciennes, etc. -Xms
égal à -Xmx
ou -XX:PermSize
égal à -XX:MaxPermSize
car elle supprimera certaines des optimisations que la JVM peut appliquer à ses stratégies d’allocation, ce qui réduit les performances de votre application au lieu de l’améliorer.
Comme toujours: effectuez des mesures non triviales pour prouver que vos modifications améliorent réellement les performances (par exemple, en améliorant le temps de démarrage pourrait être désastreux pour les performances lors de l'utilisation de l'application)
Si vous effectuez des réglages de performances, il est souvent recommandé de définir les deux -XX:PermSize
et -XX:MaxPermSize
à la même valeur pour augmenter JVM
efficacité.
Voici quelques informations:
Vous pouvez également spécifier -XX:+CMSClassUnloadingEnabled
pour activer l'option de déchargement de classe si vous utilisez CMS
GC
. Il peut être utile de diminuer la probabilité de Java.lang.OutOfMemoryError: PermGen space