Performances médiocres sous Java 7

Les performances d’AEM sous Java 7 ralentissent soudainement et les images mémoire de threads ne présentent aucune évidence d’un thread qui en serait la cause ; de nombreux threads ont un état EXÉCUTABLE et exécutent des portions de code connues pour ne présenter aucun défaut.

Ce problème est dû à un problème de cache du code dans Java 7, décrit dans cette question et réponse sur le dépassement de capacité de la pile.

En résumé, « dans Java 7, une fois que le cache du code est saturé, le JIT est arrêté, puis près d’un tiers de la zone de cache du code est vidé mais alors aucun JIT n’est réactivé ».

Il en résulte une exécution beaucoup plus lente du code Java qui a été exclu du cache de code ou n’a jamais été exécuté par JVM. Par conséquent, pour les demandes qui correspondent uniquement au code compilé JIT, les temps de réponse habituels s’appliqueront, tandis que d’autres demandes prendront beaucoup plus de temps.

Solution : mise à niveau de Java ou désactivation du vidage du cache de code

Il existe trois solutions possibles :

  • Effectuez une mise à niveau vers Java 8, qui n’est pas affecté par ce problème de performances. Il s’agit de la solution la plus sûre.
  • Effectuez la mise à niveau vers Java 1.7.0_101-b14, qui nécessite la prise en charge de Java SE d’Oracle, puisque Java 7 est obsolète depuis mai 2015.
  • Désactivez le vidage du cache de code et augmentez la taille de la mémoire cache en ajoutant les arguments JVM suivants au script de début AEM : 
    • -XX:-UseCodeCacheFlushing
    • -XX:ReservedCodeCacheSize=90M

Ces arguments définissent la taille du cache de code à 90 Mo (au lieu de 48 Mo par défaut) et désactivent le vidage de cache du code ; ainsi, en cas de dépassement de la capacité du cache de code, le code à chaud existant ne s’exécute pas en mode d’interprétation (seulement, le nouveau code n’est plus compilé). Contrôlez la taille du cache de code pendant un certain temps (par exemple à l’aide de jconsole) pour vous assurer que la valeur maximale configurée n’est pas trop faible. Notez qu’après avoir effectué la mise à niveau vers Java 8, vous devez supprimer ces paramètres.

 

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne