Comment puis-je me connecter à un outil de ligne de commande Java avec le YourKit Java Profiler?

StackOverflow https://stackoverflow.com/questions/2563777

Question

J'ai construire un outil de ligne de commande en Java, que je voudrais maintenant le profil avec YourKit. Je lance l'outil de ligne de commande avec quelque chose comme:

$ java -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

Il court à terminer en moins de 2 secondes.

Après avoir lu http://www.yourkit.com/docs/80 /help/agent.jsp , j'ai essayé ce qui suit:

$ java -agentpath:/home/dspitzer/yjp-8.0.24/bin/linux-x86-32/libyjpagent.so -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

... et je reçois:

[YourKit Java Profiler 8.0.24] JVMTI version 3001016d; 14.3-b01; Sun Microsystems Inc.; mixed mode, sharing; Linux; 32-bit JVM
[YourKit Java Profiler 8.0.24] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.24] *** HINT ***: To get profiling results, connect to the application from the profiler UI
...

(Et puis l'outil cycle complet et sorties.)

Je suppose (par défaut, au moins) YourKit est conçu pour se connecter uniquement à l'application en cours d'exécution.

Comment dois-je modifier mon outil de ligne de commande pour permettre la connexion de YourKit?

  1. Je pourrais ajouter une option de ligne de commande qui l'auront une pause pour l'entrée, et je ne porterai pas le retour pour qu'il continuer jusqu'à ce que je lui ai connecté de YourKit.
  2. Y at-il une API YourKit que je pouvais ajouter à mon outil qui amèneraient pour bloquer jusqu'à ce que je suis connecté avec YourKit?
  3. Y at-il une API YourKit ou java option de ligne qui serait créer un profil « instantané » que je pourrait charger et analyser plus tard (après l'outil de ligne de commande est terminée) avec YourKit?
Était-ce utile?

La solution

Il n'y a pas moyen de faire une pause jusqu'à ce que l'application profilée profileur ";" Connects il vous suffit de ne pas besoin de le faire.

Au lieu de cela, s'il vous plaît procédez comme suit:

  • Activer les modes de profilage de démarrage souhaité. Par exemple, si vous besoin de profils d'utilisation du processeur, soit commencer l'échantillonnage de l'UC ou le traçage CPU avec des options de démarrage correspondant « échantillonnage » ou « traçage ». Voir http://www.yourkit.com/docs/80/help/additional_agent_options. jsp

  • Si l'application est profilée courte durée, permettent la capture instantanée sur sortie avec l'option de démarrage « OnExit = instantané ». Plus tard capturé ouvert instantané dans l'interface utilisateur de profileur pour l'analyse.

Autres conseils

Je ne suis pas au courant d'une option YourKit pour le faire (ce qui ne veut pas dire qu'il n'y en a pas), mais une option de débogage à distance Java pour le faire.

Essayez d'ajouter ce qui suit à la ligne de commande, en plus des options d'agent YourKit:

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y

Cela devrait entraîner la machine virtuelle de suspendre dès qu'il démarre, en attente d'un débogueur de se connecter sur le port 8000. YourKit lui-même est pas un débogueur, mais un IDE comme Eclipse ou Netbean fera le travail, tout comme la la ligne de commande de base JDB .

Alors exécutez la commande, avec les deux options définies, connectez YourKit, puis utiliser un débogueur pour se connecter au port de débogage, qui va déclencher la machine virtuelle de poursuivre l'exécution, ce qui permet YourKit d'obtenir les données dont vous avez besoin.

Il serait préférable de faire tout cela en utilisant YourKit, mais je ne connais pas de cette manière.

Vous pouvez le lancer via Eclipse, qui a un plugin YourKit qui lance sur le lancement de l'application.

OnExit = option d'instantané de YourKit enregistre un fichier instantané sous $ HOME / Snapshots la sortie machine virtuelle Java. Vous pouvez charger cet instantané dans l'interface graphique YourKit pour une analyse ultérieure. Voir cette page sur leur site web pour plus de détails.

La réponse à # 3 est oui, il y a une API que vous pouvez utiliser pour que votre demande soit de produire des résultats de profilage qui YourKit peut alors examiner.

Jetez un oeil à la API docs , et aussi la outil de ligne de commande pour contrôler le profilage

Voici un exemple d'utilisation de l'API (je ne l'ai pas essayé ce code):

Controller ykController = new Controller();
ykController.enableStackTelemetry();
ykController.enableExceptionTelemetry();
ykController.startCPUProfiling(ProfilingModes.CPU_TRACING,Controller.DEFAULT_FILTERS);
ykController.startAllocationRecording(false,0,false,0);
YourMainClass.main(args);
String snapshotLocation = ykController.captureMemorySnapshot();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top