Initialement publié on Server Fault, où il a été suggéré que cette question pourrait être mieux posée ici.débogage JBoss 100% de l'utilisation du processeur
Nous utilisons JBoss pour exécuter deux de nos WAR. L'un est notre application Web, l'autre est notre service Web. L'application Web accède à une base de données sur une autre machine et envoie des demandes au service Web. Le service Web envoie des demandes JMS à d'autres machines, agrège les données et les renvoie.
Chez notre plus gros client, environ une fois par mois, le processus JBoss Java prend 100% de tous les processeurs. La machine qui exécute JBoss a 8 processeurs. Notre application Web est toujours accessible pendant cette période, mais le chargement des pages prend environ 3 minutes. Redémarrer JBoss restaure tout à la normale.
La base de données et toutes les autres machines fonctionnent correctement, seule la machine exécutant JBoss est affectée. L'utilisation de la mémoire est normale. L'utilisation du réseau est normale. Il n'y a aucun message d'erreur suspect dans les journaux JBoss. J'ai installé un environnement de test aussi proche que possible de l'environnement de production du client et j'ai effectué des tests de charge avec deux fois plus d'utilisateurs simultanés. Je n'ai pas obtenu mon environnement de test pour reproduire le problème.
Où allons-nous d'ici? Comment pouvons-nous réduire le problème? Actuellement, le seul plan que nous avons est d'attendre que le problème apparaisse en production, puis de déboguer pour en déterminer la cause. Jusqu'à présent, les gens ont juste redémarré JBoss quand le problème est survenu pour minimiser le temps d'arrêt. La prochaine fois que cela arrivera, ils auront un développeur pour jeter un coup d'oeil. La question est, la prochaine fois que cela arrive, que peut-on faire pour déterminer la cause?
Nous pourrions installer une instance JBoss distincte sur la même boîte et installer l'application Web séparément du service Web. De cette façon, lorsque le problème surviendra, nous saurons quelle WAR a le problème (en supposant que c'est notre code). Cela ne le réduit pas beaucoup cependant.
Dois-je activer la télécommande JMX? De cette façon, la prochaine fois que le problème se produit, je peux me connecter avec VisualVM et voir quels threads prennent le CPU et ce qu'ils font. Cependant, y a-t-il un inconvénient important à l'activation de JMX remote dans un environnement de production?
Existe-t-il une autre façon de voir quels threads mangent le processeur et d'obtenir une pile pour voir ce qu'ils font?
D'autres idées?
Merci!
Bonjour. Avez-vous trouvé la cause du problème avec JBoss? Nous avons le même problème de temps en temps. –
Oui, désolé pour le retard. Nous avions un HashMap écrit par deux threads simultanément. Si un put déclenche un rehash, le second put peut faire pointer deux nœuds de carte l'un vers l'autre. Le prochain get sur le HashMap déclenchera une boucle infinie. – NateS