Cet article est l'article du 10ème jour de "Java EE Advent Calendar 2016". Jour 9 (jour précédent): @megascus "[Moduler et combiner les applications Web Java EE](http://d.hatena.ne.jp/megascus/ 20161209/1481252793) " Jour 11 (demain): @yyYank
Cela fait un an et demi que j'ai commencé Java EE. J'ai eu l'occasion d'étudier le réglage des performances de Glassfish pendant le développement, je vais donc résumer ce que j'ai étudié à ce moment-là.
Glassfish (et d'autres serveurs d'applications) est "optimisé pour le développement" par défaut. En ce qui concerne la fonction de déploiement automatique, le rechargement dynamique et la JVM, nous donnons la priorité au ** "démarrage" ** plus rapide au ** "run" ** plus rapide. Bien que ces fonctionnalités soient très utiles pendant la phase de développement, elles peuvent être un goulot d'étranglement des performances pendant la phase de production.
Il est important de savoir comment régler Glassfish afin de fournir un meilleur service et de savoir comment optimiser les paramètres de votre environnement de production.
Cette fois, je vais vous expliquer le réglage des performances de base de Glassfish.
** Remarque: le réglage pendant le développement n'est pas recommandé et n'a aucun sens. Le développement ralentira. ** **
Les paramètres dépendant de l'environnement sont définis comme suit.
chemin | sens |
---|---|
<glassfish> | Chemin où Glassfish est installé |
<domain-name> | Nom de domaine à régler |
De plus, si vous souhaitez ajouter des paramètres au fichier de paramètres
ajouter à
<!--Paramètres additionnels-->
Si vous souhaitez modifier les paramètres
Changer avant
<!--Paramètres avant modification-->
Après le changement
<!--Paramètres après modification-->
Il est représenté par.
Il existe trois principaux types de réglage.
** 1. Le réglage JVM ** est l'idée de "accélérons les gens qui dirigent Glassfish en premier lieu". Il peut être appliqué à d'autres programmes Java. ** 2. Glassfish Tuning ** optimise littéralement les paramètres de Glassfish lui-même pour l'accélérer. ** 3. Program Tuning ** consiste à optimiser le programme lui-même à exécuter par Glassfish. Nous essaierons d'accélérer en utilisant pleinement du code et des techniques plus efficaces en mémoire. Non couvert dans cet article.
Tout d'abord, pensons au réglage de la JVM.
Après la configuration, redémarrez le domaine cible.
Les paramètres JVM lors du démarrage de Glassfish sont décrits dans le fichier <glassfish> / domains / <domain-name> / config / domain.xml
.
Dans le fichier
domain.xml
<java-config ...>
<jvm-options>..</jvm-options>
<jvm-options>..</jvm-options>
<jvm-options>..</jvm-options>
</java-config>
Je pense qu'il y a une partie. C'est l'option à passer à la JVM au démarrage de Glassfish.
Changer avant
<jvm-options>-client</jvm-options>
Après le changement
<jvm-options>-server</jvm-options>
Veuillez vous référer à ce qui suit pour la différence entre le mode serveur et le mode client. Référence --Vraies différences entre «java -server» et «java -client»?
ajouter à
<jvm-options>-verbose:gc</jvm-options> <!--Activer la journalisation GC-->
<jvm-options>-XX:+PrintGCDetails</jvm-options> <!--Sortie plus détaillée-->
<jvm-options>-Xloggc:/path/to/logfile.log</jvm-options> <!--Sortie dans un fichier-->
Veuillez définir la destination de sortie du journal sur \
Si vous souhaitez obtenir des informations plus détaillées sur GC, veuillez vous reporter à ce qui suit. Supplément - Un résumé des options GC de Java.
ajouter à
<jvm-options>-XX:+DisableExplicitGC</jvm-options>
Veuillez vous référer à l'URL suivante pour les inconvénients de l'exécution manuelle de System # gc (). Reference-Distribution of WebSphere: Part 5 "Running System # gc ()"
Changer avant
<jvm-options>-Xmx512m</jvm-options>
Par défaut, il est configuré pour allouer 512 Mo. La quantité de mémoire allouée est optimisée par le test de charge et le journal de nettoyage de la mémoire, mais si vous n'êtes pas particulier à ce sujet, définissons la valeur sur "Autoriser jusqu'à ce point pour le moment". S'il n'y a pas de problème, réglez-le sur "2 Go".
Après le changement
<jvm-options>-Xms2048m</jvm-options>
<jvm-options>-Xmx2048m</jvm-options>
"-Xms" représente la valeur initiale et "-Xmx" représente la valeur maximale, mais il est recommandé de les faire correspondre. Si la valeur initiale et la valeur maximale ne correspondent pas, un traitement d'allocation inutile se produira. S'il n'y a pas de problème particulier, faisons correspondre. Vous trouverez ci-dessous une URL de référence plus détaillée pour le réglage de la mémoire. Si vous êtes intéressé, veuillez le lire et ajouter les paramètres appropriés. Réglage de référence-JVM
Il est possible que la zone de tas ait été étendue en raison de la fréquence de GC, mais le problème n'est pas résolu. Notez que cela peut être un problème avec le programme de l'application que vous exécutez. Voir ci-dessous pour plus de détails Supplément --- 9. L'augmentation de la taille du tas résout le problème de mémoire
Si vous approfondissez le réglage de la JVM, il n'y a pas de fin, je vais donc le terminer ici. Si vous êtes intéressé, veuillez le vérifier.
Nous accorderons Honmaru et Glassfish. Vous pouvez modifier les paramètres depuis la console de gestion (localhost: 4848), mais il est recommandé d'utiliser une commande qui vous permet d'organiser les processus sous forme de script. Si vous l'enregistrez sous forme de script, vous n'aurez pas à modifier les paramètres à chaque fois que vous configurez le serveur.
Par la suite, nous utiliserons la commande ʻasadmin, qui se trouve dans
$ ./asadmin set server.admin-service.das-config.autodeploy-enabled=false`
C'est une fonctionnalité de déploiement automatique pratique, mais elle n'est pas nécessaire pendant la phase de production, alors désactivez-la.
$ ./asadmin set server.admin-service.das-config.dynamic-reload-enabled=false
Le rechargement dynamique est une fonction qui reflète automatiquement les modifications de l'application sans redémarrer le serveur. C'est très pratique, mais lorsqu'il est activé, Glassfish continue de vérifier les changements à intervalles réguliers. Désactivez-le pour améliorer les performances. Par défaut, le contrôle est effectué toutes les 2 secondes. Si vous ne souhaitez pas le désactiver, mais souhaitez gagner en performances, définissez cet intervalle plus longtemps.
Lors du changement de l'intervalle à 1 minute
$ ./asadmin set server.admin-service.das-config.dynamic-reload-poll-interval-in-seconds=60
$ ./asadmin set server.admin-service.das-config.autodeploy-jsp-precompilation-enabled=true
Améliorez les performances en précompilant JSP (Java Server Pages).
$ ./asadmin set-log-levels <logger-name>=WARNING
L'exportation d'un grand nombre de journaux entraînera de mauvaises performances.
Fondamentalement, au stade de la production, il suffit d'avoir des journaux de niveau WARNING ou supérieur, donc s'il n'y a pas de problème, définissons le niveau de journalisation de l'enregistreur sur WARNING.
(Vous pouvez lister les enregistreurs et leurs niveaux de journalisation avec la commande ./asadmin list-log-levels
)
** Attention: il est prudent de cracher beaucoup de journaux lorsque le système n'est pas stable, comme au début de l'opération **
L'option genStrAsCharArray est une option qui traite une chaîne de caractères (String) comme un tableau de caractères (char). Le traiter comme un tableau de caractères économise de la mémoire et réduit la surcharge. Ce réglage est ridiculisé comme une "micro-optimisation", mais si la poussière s'accumule ...
Ajoutez à la partie de configuration liée au servlet jsp dans <glassfish> / domains / <domain-name> / default-web.xml
.
ajouter à
<servlet>
<servlet-name>jsp</servlet-name>
...
...
<!--Partie supplémentaire-->
<init-param>
<param-name>genStrAsCharArray</param-name>
<param-value>true</param-value>
</init-param>
<!-- /Partie supplémentaire-->
</servlet>
Cela fait un an depuis le dernier Calendrier de l'Avent Java EE 2015 auquel j'ai participé pour la première fois. Je m'inquiète pour l'avenir, comme Oracle sentant la fin du développement de Java EE, mais j'aimerais que Java EE fasse de son mieux sans perdre le vent de face.
Recommended Posts