2

Nous avons plusieurs applications Java qui s'exécutent en tant que services Windows en utilisant le wrapper de service Java de Tankui. Notre client rencontre un problème d'évolutivité lors du démarrage de la machine (30 premières secondes).Mesurer les performances du service Java pendant le démarrage de la machine?

Traditionnellement, nous avons utilisé jconsole/visualvm pour surveiller l'intégrité de la machine virtuelle Java. Mais ces outils ne sont pas très bons pour capturer les performances de java.exe lors du démarrage d'une machine. J'ai cherché sur Google une réponse et le meilleur résultat de recherche que j'ai trouvé était un article intitulé "Mesurer le temps de démarrage d'une machine virtuelle Java" mais ils ont eu recours à l'instrumentation avec un appel JNI http://www.mii.lt/olympiads_in_informatics/pdf/INFOL073.pdf. Nous préférerions une approche moins invasive. Qu'est-ce qu'un bon outil ou technique externe capable de capturer les statistiques java.exe (nombre de threads, utilisation de tas, etc.) pendant le démarrage de la machine?

@djmorton a demandé de définir le problème d'évolutivité. Le problème est que lorsque l'application surveille 100 objets système tout va bien. Mais, lorsque les données augmente à 1000 objets système alors

  • 1100 threads JVM exécuter simultanément
  • Fil X tient un verrou en écriture sur un verrou Java lecture-écriture C1 est occupé mettre à jour une partie d'un objet de système en utilisant Hibernate Le thread Y maintient la verrou intrinsèque de l'objet JVM de la structure P et attend un verrou de lecture sur le verrou de lecture-écriture Java C1 pour lire une autre partie de l'objet système de la base de données en utilisant Hibernate/c3p0 /. JDBC/MySQL
  • Le thread Z attend d'obtenir le verrou intrinsèque de l'objet JVM de la structure P.
+0

Quels types de problèmes d'évolutivité observez-vous? Souvenez-vous qu'en raison de la nature dynamique de la compilation native de Java, la machine virtuelle Java a besoin de temps pour se «réchauffer», pendant laquelle les chemins de code exécutés sont surveillés et finalement compilés en code natif. Jusqu'à ce que cela se produise, la performance globale peut en souffrir. – djmorton

+0

Utilisez-vous le serveur du client JVM? La saveur du serveur est optimisée pour une plus grande vitesse dans le temps, mais un démarrage plus lent alors que le client est optimisé pour le démarrage le plus rapide. – Necreaux

Répondre

0

Nous avons fini par utiliser JProfiler en mode déconnecté. JProfiler vous permet de configurer des déclencheurs basés sur le démarrage de la machine virtuelle Java. JProfiler nous permet d'accéder à diverses données de télémétrie JVM, telles que le nombre de threads, plus les conflits de verrous Java, les vidages de thread, etc. pendant le démarrage du service Java.

Nous avons dû contourner un problème d'autorisations de fichiers Windows. JProfiler souhaite créer un fichier temporaire, mais dans cet environnement, JProfiler s'exécute dans un service Windows à l'aide du compte LocalSystem. Le travail consiste à configurer temporairement le service pour qu'il fonctionne en tant qu'administrateur.