web-dev-qa-db-fra.com

-XX: MaxPermSize avec ou sans -XX: PermSize

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

50
dimitrisli

-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.

44
tobiasbayer

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)

25
Mark Rotteveel

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:

  1. Prise en charge du tas de pages volumineuses sur les plates-formes x86 et AMD64
  2. support Java pour les grandes pages de mémoire
  3. Réglage de la taille de la génération permanente

Vous pouvez également spécifier -XX:+CMSClassUnloadingEnabled pour activer l'option de déchargement de classe si vous utilisez CMSGC. Il peut être utile de diminuer la probabilité de Java.lang.OutOfMemoryError: PermGen space

7
szhem