[JAVA] Liste de réglages de Glassfish que je souhaite conserver pour le moment

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

introduction

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.

Types de réglage

Il existe trois principaux types de réglage.

  1. Réglage JVM
  2. Réglage Glassfish
  3. Réglage du programme

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

Réglage JVM

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.

1. Pour travailler en mode serveur

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»?

2. Sortez le journal du garbage collection

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 avez un problème de mémoire ou si vous souhaitez savoir si vous disposez de suffisamment de mémoire allouée, recherchez dans le journal un comportement suspect dans votre garbage collection. Reference-Garbage Collection: Une brève explication et une méthode de recherche pour GC (Garbage Collection)

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.

3. Désactivez System # gc ()

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 ()"

4. Modifiez la mémoire allouée à la zone de tas

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.

Réglage Glassfish

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 / bin / asadmin`.

1. Désactivez le déploiement automatique

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

2. Désactivez le rechargement dynamique

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

3. Précompilez le JSP

$ ./asadmin set server.admin-service.das-config.autodeploy-jsp-precompilation-enabled=true

Améliorez les performances en précompilant JSP (Java Server Pages).

4. Resserrez le niveau du journal

$ ./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 **

5. Activez genStrAsCharArray

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>

en conclusion

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

Liste de réglages de Glassfish que je souhaite conserver pour le moment
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
Commande pour essayer d'utiliser Docker pour le moment
Je souhaite rechercher de manière récursive la liste des classes sous le package
Je souhaite renvoyer plusieurs valeurs de retour pour l'argument saisi
Java14 est sorti, alors j'ai essayé d'enregistrer pour le moment
[Java] Je veux vérifier que les éléments de la liste sont nuls ou vides [Collection Utils]
Introduction à Java pour la première fois # 2
[First Java] Créez quelque chose qui fonctionne avec Intellij pour le moment
Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
Je veux var_dump le contenu de l'intention
J'ai essayé de toucher Docker pour la première fois
Installez Amazon Corretto (préversion) pour le moment
Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires
Je veux tronquer après la virgule décimale
Utilisez une bibliothèque Java externe pour le moment
Exécutez Dataflow, Java, Streaming pour le moment
Je veux obtenir la valeur en Ruby
Mémo à faire pour le moment lors de la construction de la série CentOS 6 avec VirtualBox
7 choses que je veux que tu gardes pour que ça ne devienne pas un putain de code
Je veux intégrer n'importe quel TraceId dans le journal
Flux appris (je veux convertir la liste en carte <Integer, List>)
Je veux juger la gamme en utilisant le diplôme mensuel
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je souhaite utiliser le mode sombre avec l'application SWT
Essayez d'exécuter Spring Cloud Config pour le moment
Je veux appeler la méthode principale en utilisant la réflexion
[Commentaire approximatif] Je veux épouser la méthode du pluck
Je veux retourner la position de défilement de UITableView!
Je souhaite simplifier la sortie du journal sur Android
Je souhaite créer une annotation générique pour un type
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Comment étudier le kotlin pour la première fois ~ Partie 2 ~
Comment étudier le kotlin pour la première fois ~ Partie 1 ~
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
Je souhaite contrôler la taille de fichier maximale pour le téléchargement de fichiers pour chaque URL dans Spring Boot
Implémentation d'une API forte pour "Je veux afficher ~~ à l'écran" avec un simple CQRS
Je souhaite régler la durée de lecture de la vidéo (HH: MM: SS) sur le nombre de secondes, et vice versa
[Débutant] Je souhaite modifier le fichier de migration-Comment utiliser la restauration-
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
[Rails] [bootstrap] Je souhaite modifier la taille de la police de manière réactive
Hello World avec la bibliothèque d'extension Ruby pour le moment
(´-`) .. oO (Je veux trouver facilement la sortie standard" Hello ".
Je veux amener Tomcat sur le serveur et démarrer l'application
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Je veux faire une liste avec kotlin et java!