Le profilage d'une exécution d'une application Java en ligne de commande
J'ai le profil de l'exécution des applications Java souvent avec VisualVM, mais il a besoin de X sur la machine.
Je sais que je peux me connecter par le biais du port de gestion, mais qui sera un mode hors connexion échantillonnées de profilage qui n'est pas assez pour moi.
Donc je suis à la recherche d'une solution qui je peux le profil de l'utilisation du CPU par les méthodes de l'exécution d'une application Java à partir de la ligne de commande. C'est assez pour moi de recueillir des données sur le serveur, puis les données collectées peuvent être analysés sur une autre machine.
Mise à jour:
Il semble que j'ai besoin d'être plus précis. Je veux le profil d'une exécution d'une application Java en ligne de commande, je ne veux pas m'arrêter et relancez-le.
- Vous pouvez collecter 10 ou 20 échantillons de la pile avec jstack? Alors si Foo est une méthode globale de son temps d'utilisation est la fraction des échantillons contenant. Son utilisation de l'UC est la fraction de ces échantillons qui ne se termine en I/O ou un appel système. Son "temps" est la fraction des échantillons dans lesquels il est lui-même le terminus.
- que serait le même que le VisualVM hors-ligne de profilage, de ne pas l'être?
- Cochez la doc. Il ne vous dit pas, par ligne (ne pas fonctionner) le pourcentage de temps d'inclusion (non exclusifs) qui est chargé de la, et de temps ensemble (et pas seulement de l'UC). Il souffre de la ces problèmes. Pile de l'échantillonnage n'est pas assez, mais il trouve que le rendement des problèmes très rapidement. D'autres outils sont à peu, et ils vous donnent beaucoup de chiffres pour comprendre, mais ils ne prennent pas directement au problème, quel qu'il soit.
- J'ai essayé de trouver des traces de la pile, mais il refuse de se lancer sans le
-F
drapeau, avec qui il gèle mon application. - Hey, je n'ai pas besoin de quelque chose de joli. Je l'exécuter en vertu de l'IDE et de recueillir de cette façon, ou utiliser quelque chose comme jstack que des instantanés de la cheminée d'une application en cours d'exécution.
- pourriez-vous poster votre commentaire est une réponse? Je l'accepterais!
Vous devez vous connecter pour publier un commentaire.
La jvmtop application est un outil pratique pour le profilage de la ligne de commande. Pas besoin d'arrêter la machine virtuelle java. Utilisation:
Vous donnera sortie comme celle qui sera mise à jour lorsque l'application s'exécute:
L'avantage est qu'il ne prend pas l'utilisation de l'instrumentation. Les classes de l'à-être-profilé jvm ne sera pas modifiée.
Si vous êtes à la recherche de quelque chose de plus visuel puis un coup d'oeil à jvm-lun. qui est basé sur jvmtop
Vous pouvez collecter 10 ou 20 échantillons de la pile avec jstack? Alors si Foo est une méthode globale de son temps d'utilisation est la fraction des échantillons contenant. Son utilisation de l'UC est la fraction de ces échantillons qui ne se termine en I/O ou un appel système. Son "temps" est la fraction des échantillons dans lesquels il est lui-même le terminus.
Je n'ai pas besoin de quelque chose de joli. Je l'exécuter en vertu de l'IDE et de recueillir de cette façon, ou utiliser quelque chose comme jstack que des instantanés de la cheminée d'une application en cours d'exécution.
C'est le aléatoire-pause technique.
Ressemble à la "built-in" manière de profil d'une application java à partir de la ligne de commande est de le démarrer avec le profilage de paramètres de ligne de commande, comme ceci
Puis examinez le fichier "myprogram.hprof", avec un outil graphique (ou un serveur web comme outil jhat) ou outil de ligne de commande après le processus s'arrête (et le fichier est créé à l'époque).
Si vous utilisez la fonction "QUITTER" signal truc, mentionné https://stackoverflow.com/a/2344436/32453 vous pouvez ensuite générer un fichier sans sortir de la JVM (il apparaît à ajouter à la précédente du fichier de sortie). Ou attendre jusqu'à ce que le processus s'arrête et il va générer le fichier.
Présente (intégrée) de profiler un échantillon rarement donc généralement faible ralentissement/impact global.
ref: http://web.archive.org/web/20160623224137/https://thunderguy.com/semicolon/2004/04/18/profiling-a-java-program-easily/
jstack
décharges, comme je m'y attendais, mais ne s'agit-il de mesurer la consommation CPU). Il a d'autres pièges - voir brendangregg.com/blog/2014-06-09/...Nous avons utilisé hprof sur nos serveurs, et c'est certainement mieux que sysouts dans le cas où vous ne pouvez pas exécuter à part entière, VisualVM session.
Des exemples d'utilisation de hprof sont beaucoup là-bas:
hprof
ne permet pas de s'attacher à un processus. Votre meilleur pari serait de se pencher sur des outils comme jprofile et jtop. java.sun.com/developer/technicalArticles/J2SE/monitoringVous pouvez exécuter la plupart des commerciaux profileurs à distance afin qu'un agent est exécuté sur le serveur, puis vous connecter à l'agent par le biais d'un client sur votre machine de dev. Mon favori absolu profiler est JProfiler. Il est assez raisonnable de l'achat, et c'est très stable (non commercial profileurs qui est vrai).
http://www.ej-technologies.com/products/jprofiler/overview.html
Commerciales, les profileurs qui sont stables, mais pas mes préférés sont YourKIT.
http://www.yourkit.com/
Ces petits vendeurs de faire de bons outils. Ces outils permettront de vous fournir des tonnes d'informations sur la méthode timings, l'utilisation de la mémoire, GC, etc. Beaucoup plus de jconsole.
Une façon de profil d'un "déjà commencé" JVM est de regrouper plusieurs jstacks pris au fil du temps.
Vous pouvez par exemple d'analyser et de les afficher comme un FlameGraph (voir les détails dans les différentes réponses pour ce lien, je ne vais pas manière redondante les inclure ici).
Les plus précis, le profilage peut être réalisé avec https://github.com/jvm-profiling-tools/async-profiler.
Voici mon script pour l'installer et l'exécuter à partir de la ligne de commande:
async-profiler.sh
Elle suppose que l'application est exécutée sous le même utilisateur, et il y a un seul processus java PID pour être répertorié par jps.
Le profilage de la durée est de 60 secondes.
Aucune modification de l'application des options de démarrage ou de l'application redémarrage est nécessaire.
GUI pour l'examen des dumps est intégré dans IntelliJ IDEA Ultime: https://www.jetbrains.com/help/idea/cpu-profiler.html.