Comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage

Nous allons vous présenter comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage. Ici, l'état de ** Eclipse GlassFish 5.1.0 ** est enregistré.

environnement

[glassfish@CENTOS7 ~]$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[glassfish@CENTOS7 ~]$
[glassfish@CENTOS7 ~]$ java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
[glassfish@CENTOS7 ~]$
[glassfish@CENTOS7 ~]$ /opt/glassfish5/glassfish/bin/asadmin version
Version string could not be obtained from Server [localhost:4848].
(Turn debugging on e.g. by setting AS_DEBUG=true in your environment, to see the details.)
Using locally retrieved version string from version class.
Version = GlassFish Server Open Source Edition  5.1.0  (build default-private)
Command version executed successfully.
[glassfish@CENTOS7 ~]$

Pour l'installation de ** GlassFish 5.1.0 **, reportez-vous à la section précédente Comment installer Eclipse GlassFish 5.1.0 sur CentOS 7. S'il te plait donne moi.

1. Définition des options JVM lors du démarrage de Glassfish

Ajoutez ce qui suit aux options JVM lors du démarrage de Glassfish.

Plus précisément, "domain / configs / java-config" de domain.xml sous" / opt / glassfish5 / glassfish / domains / domain1 / config" (balise java-config dans la balise configs dans la balise de domaine) Ajoutez les 3 lignes suivantes à (à l'intérieur).

/opt/glassfish5/glassfish/domains/domain1/config/domain.Ajouter au xml


<jvm-options>-XX:+UnlockCommercialFeatures</jvm-options>
<jvm-options>-XX:+FlightRecorder</jvm-options>
<jvm-options>-XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/var/log/jvm/repositories,maxsize=2048m,maxage=25h,dumponexit=true,dumponexitpath=/var/log/jvm/dump.jfr</jvm-options>

Ici, / var / log / jvm est utilisé comme répertoire temporaire, donc créez un répertoire jvm sous / var / log, et l'utilisateur de glassfish peut créer des fichiers et des fichiers sous / var / log / jvm. Assurez-vous que vous pouvez créer le répertoire.

Résultat d'exécution


[glassfish@CENTOS7 ~]$ su
mot de passe:
[root@CENTOS7 glassfish]# cd /var/log
[root@CENTOS7 log]#
[root@CENTOS7 log]# mkdir jvm
[root@CENTOS7 log]# chown glassfish:glassfish jvm
[root@CENTOS7 log]# exit
exit
[glassfish@CENTOS7 ~]$

2. Démarrez Glassfish

Démarrez Glassfish avec la commande suivante.

/opt/glassfish5/glassfish/bin/asadmin start-domain domain1

Résultat d'exécution


[glassfish@CENTOS7 config]$ /opt/glassfish5/glassfish/bin/asadmin start-domain domain1
Waiting for domain1 to start ......
Successfully started the domain : domain1
domain  Location: /opt/glassfish5/glassfish/domains/domain1
Log File: /opt/glassfish5/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
[glassfish@CENTOS7 config]$

3. Sortie du fichier de vidage JFR

Tout d'abord, vérifiez l'ID de processus de glassfish avec la commande suivante.

ps -ef | grep glassfish | grep -v grep

Résultat d'exécution


[glassfish@CENTOS7 config]$ ps -ef | grep glassfish | grep -v grep
glassfi+ 26302     1  5 19:54 pts/0    00:00:16 /usr/java/jdk1.8.0_241-amd64/bin/java -cp /opt/glassfish5/glassfish/modules/glassfish.jar -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:NewRatio=2 -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/var/log/jvm/repositories,maxsize=2048m,maxage=25h,dumponexit=true,dumponexitpath=/var/log/jvm/dump.jfr -XX:+FlightRecorder -XX:MaxPermSize=192m -Xmx512m -javaagent:/opt/glassfish5/glassfish/lib/monitor/flashlight-agent.jar -client -Djavax.xml.accessExternalSchema=all -Djavax.net.ssl.trustStore=/opt/glassfish5/glassfish/domains/domain1/config/cacerts.jks -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djdk.corba.allowOutputStreamSubclass=true -Dfelix.fileinstall.dir=/opt/glassfish5/glassfish/modules/autostart/ -Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall -Dcom.sun.aas.installRoot=/opt/glassfish5/glassfish -Dfelix.fileinstall.poll=5000 -Djava.endorsed.dirs=/opt/glassfish5/glassfish/modules/endorsed:/opt/glassfish5/glassfish/lib/endorsed -Djava.security.policy=/opt/glassfish5/glassfish/domains/domain1/config/server.policy -Dosgi.shell.telnet.maxconn=1 -Dfelix.fileinstall.bundles.startTransient=true -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dfelix.fileinstall.log.level=2 -Djavax.net.ssl.keyStore=/opt/glassfish5/glassfish/domains/domain1/config/keystore.jks -Djava.security.auth.login.config=/opt/glassfish5/glassfish/domains/domain1/config/login.conf -Dfelix.fileinstall.disableConfigSave=false -Dfelix.fileinstall.bundles.new.start=true -Dcom.sun.aas.instanceRoot=/opt/glassfish5/glassfish/domains/domain1 -Dosgi.shell.telnet.port=6666 -Dgosh.args=--nointeractive -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as -Dosgi.shell.telnet.ip=127.0.0.1 -DANTLR_USE_DIRECT_CLASS_LOADING=true -Djava.awt.headless=true -Dcom.ctc.wstx.returnNullForDefaultNamespace=true -Djava.ext.dirs=/usr/java/jdk1.8.0_241-amd64/lib/ext:/usr/java/jdk1.8.0_241-amd64/jre/lib/ext:/opt/glassfish5/glassfish/domains/domain1/lib/ext -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -Djava.library.path=/opt/glassfish5/glassfish/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -upgrade false -domaindir /opt/glassfish5/glassfish/domains/domain1 -read-stdin true -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=true,,,start-domain,,,--verbose=false,,,--watchdog=false,,,--debug=false,,,--domaindir,,,/opt/glassfish5/glassfish/domains,,,domain1 -domainname domain1 -instancename server -type DAS -verbose false -asadmin-classpath /opt/glassfish5/glassfish/lib/client/appserver-cli.jar -debug false -asadmin-classname com.sun.enterprise.admin.cli.AdminMain
[glassfish@CENTOS7 config]$

Vous pouvez voir que l'ID de processus est «26302».

Exportez l'enregistrement JFR (Java Flight Recorder) dans un fichier de vidage avec la commande suivante.

jcmd <ID de processus> JFR.dump Recording = 0 filename = <chemin du fichier de vidage de sortie>

Résultat d'exécution


[glassfish@CENTOS7 ~]$ jcmd 26302 JFR.dump recording=0 filename=/home/glassfish/perf/test_$(date "+%Y%m%d_%H%M%S").jfr
26302:
Dumped recording 0, 2.5 MB written to:

/home/glassfish/perf/test_20200726_200546.jfr
[glassfish@CENTOS7 ~]$

Vérifiez le fichier de vidage de sortie.

Résultat d'exécution


[glassfish@CENTOS7 ~]$ cd /home/glassfish/perf
[glassfish@CENTOS7 perf]$ ls -l
2600 au total
-rw-rw-r--.1 glassfish glassfish 2660207 26 juillet 20:05 test_20200726_200546.jfr
[glassfish@CENTOS7 perf]$

3. Reportez-vous au fichier de vidage (fichier jfr) produit par "jmc.exe"

Transférez le fichier de vidage jfr de sortie (test_20200726_200546.jfr) sur un PC Windows sur lequel jdk1.8 est installé.

Démarrez "jmc.exe" (Java Mission Contorol) sous " C: \ Program Files \ Java \ jdk1.8.0_231 \ bin ".

01.png

Ouvrez la sortie du fichier jfr dump (test_20200726_200546.jfr) en sélectionnant "Fichier" - "Ouvrir le fichier" dans le menu.

02.png

03.png

Vous pouvez vous référer à la sortie du fichier de vidage jfr par "jmc.exe" (Java Mission Contorol).

04.png

référence

Java Platform, Standard Edition Tools Reference

Recommended Posts

Comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage
[Java] Comment sortir et écrire des fichiers!
Comment compresser un fichier JAVA CSV et le gérer dans un tableau d'octets
Comment passer d'Eclipse Java à un fichier SQL
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
Comment développer et enregistrer une application Sota en Java
Comment créer un conteneur Java
J'ai vérifié Java Flight Recorder (JFR)
Enregistrer la sortie dans un fichier en Java
Comment créer un tableau Java
Comment charger un fichier de téléchargement Spring et afficher son contenu
Comment lire un fichier et le traiter comme une entrée standard
Convertissez Excel en Blob avec java, enregistrez-le, lisez-le à partir de DB et exportez-le sous forme de fichier!
Comment créer un résumé de calendrier Java
[Java] Comment utiliser la classe File
[Introduction à Java] Comment écrire un programme Java
Comment créer un robot Discord (Java)
Comment sortir une chaîne Java sur l'écran de la console
[IntelliJ IDEA] Comment ajouter automatiquement la finale lors de l'enregistrement d'un fichier Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment savoir quelle version Java d'un fichier de classe a été compilée
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Gratter et écrire des éléments spécifiques dans un fichier
Comment sortir Excel et PDF avec Excella
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Bases du développement Java ~ Comment écrire un programme (flux et branchement conditionnel) ~
Comment vider de la base de données (DB) vers le fichier de départ
Comment convertir un contrat de solidité en une classe de contrat Java
Histoire d'essayer de faire fonctionner le fichier JAVA
Comment obtenir et étudier Java SE8 Gold
Comment accéder aux méthodes et champs Java Private
[Java] Comment utiliser la classe Calendar et la classe Date
Créer un servlet Java et un fichier WAR JSP à déployer sur Apache Tomcat 9 avec Gradle
<java> Lire le fichier Zip et le convertir directement en chaîne
Comment créer un environnement Java en seulement 3 secondes
[Java] Types de commentaires et comment les rédiger
Comment entrer / sortir des fichiers mainframe IBM en Java?
java: Comment écrire une liste de types génériques [Note]
[Java] Comment sortir de Janken (équivalent à paiza rang A)
[Java] Comment extraire le nom du fichier du chemin
Comment lire la gestion de la mémoire Java et GC Viewer
Comment créer un URI de données (base64) en Java
[Java] Comment obtenir une requête par communication HTTP
[Java] Comment exécuter des tâches régulièrement
Comment télécharger des fichiers (Servlet, HTML, Apache, Tomcat)
[Java] Comment découper une chaîne de caractères caractère par caractère
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
[Java] Comment rompre une ligne avec StringBuilder
Comment écrire des commentaires dans le fichier de définition de schéma dans GraphQL Java et les refléter dans GraphiQL et GraphQL Playground
Comment demander un fichier CSV au format JSON avec jMeter
Comment lire votre propre fichier YAML (*****. Yml) en Java
Générer et exécuter le fichier Jar du fichier Java appartenant au package
Attribuer des expressions lambda Java8 aux variables et les réutiliser
[Ruby] Comment diviser chaque requête GraphQL en fichiers
Branchement conditionnel Java: comment créer et étudier des instructions de commutation
Comment créer une image de conteneur légère pour les applications Java