5 votes

Traçage des entrées/sorties dans une application java ?

J'essaie de comprendre pourquoi Apache CXF s'enfuit en faisant "quelque chose" lors de la première initialisation d'un service web. Ce "quelque chose" est probablement une sorte d'entrée-sortie, et je suppose qu'il s'agit d'essayer de résoudre une adresse externe/un schéma/DTD quelconque.

J'essaie donc de trouver une sorte de crochet où je peux surveiller toutes les entrées-sorties. Soit au niveau de la VM, soit au niveau du système d'exploitation (je peux fonctionner sous Linux et Windows, mais je ne suis pas autorisé à utiliser Wireshark, et il y a une possibilité théorique que ce soit des entrées/sorties de fichiers).

Avez-vous des suggestions sur la façon dont je peux trouver ce qui se passe ?

4voto

Martin Wickman Points 9628

Si vous voulez vraiment savoir ce qui se passe, vous pouvez lancer 'strace' ou 'ltrace' sur le processus apache. Il existe une courte introduction à ce sujet aquí . Ce qui est intéressant, c'est que Strace devrait bloquer dans un certain appel, c'est-à-dire attendre les entrées/sorties si votre hypothèse est correcte.

Pour vérifier les fichiers (et les sockets réseau) utilisés par un processus donné, consultez 'lsof'. Par exemple, pour vérifier quels fichiers sont ouverts par un certain processus :

lsof -p process_id  # by PID
lsof -c httpd       # by a process name

Pour vérifier les connexions réseau en général, essayez 'netstat'.

2voto

Daniel Kulp Points 8782

Il est très probablement occupé à résoudre le WSDL, à l'analyser, à le traiter, etc.....

En fait, la première fois, il traite également tous les fichiers de configuration de Spring, ce qui implique le chargement de schémas pour ceux-ci, la validation, etc.

Vous pourriez aussi utiliser quelque chose comme wireshark pour suivre tout le trafic réseau et voir s'il va chercher quelque chose.

2voto

Tom Points 13036

Sous Windows, vous pouvez utiliser filemon il vous donnera la liste de tous les accès aux fichiers et vous permettra de les filtrer pour ne voir que ceux du processus qui vous intéresse.

On dirait que pour les versions plus récentes de Windows Moniteur de processus est la voie à suivre.

2voto

joev Points 1001

En plus de strace et filemon, qui surveillent l'application au niveau du système d'exploitation, vous pouvez également essayer un profileur interactif. Un outil comme le logiciel gratuit de Sun VisualVM peut vous montrer à quelle fréquence les différentes méthodes sont appelées, ainsi qu'un moyen facile de générer et de visualiser les vidages de threads. Ainsi, vous pouvez voir si l'application tourne dans votre propre code, ou si le thread bloque en attendant une entrée-sortie qui ne se termine jamais.

1voto

mchr Points 2347

Vous pouvez tracer votre application au niveau de la JVM en utilisant InTrace . Cela vous permettrait d'identifier le code Java exécuté au cours du démarrage. Cette méthode utilise un agent Java pour ajouter une instrumentation aux classes lorsqu'elles sont chargées et peut ainsi générer des appels d'entrée/sortie de méthode pour toutes les classes utilisées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X