Comment puis-je surveiller/log le pool de threads de Tomcat?

J'ai une installation Tomcat où je soupçonne que le nombre de threads diminue avec le temps en raison du fait que les threads ne sont pas correctement libérés. J'obtiens une erreur dans catalina.sortie lorsque maxthreads est atteint, mais je voudrais enregistrer le nombre de threads utilisés dans un fichier toutes les cinq minutes pour que je puisse vérifier cette hypothèse. Quelqu'un aurait-il s'il vous plaît être en mesure de conseiller la façon dont cela peut être fait?

également dans cette installation il n'y a pas de Tomcat manager, il semble que celui qui a fait l'original l'installation a supprimé le gestionnaire webapp pour une raison quelconque. Je ne suis pas sûr que le gestionnaire serait en mesure de faire ce qui précède ou si je peux le réinstaller sans endommager l'installation existante? Tout ce que je veux vraiment faire c'est garder une trace du pool de fils.

aussi, J'ai remarqué que maxthreads pour Tomcat est de 200, mais le nombre max de connexions simultanées pour Apache est plus faible (Apache utilise mod_proxy et mod_proxy_ajp (AJP 1.3) pour alimenter Tomcat). Cela semble également faux, Quelle est la relation correcte entre ces nombres?

toute aide très appréciée: D

mise à Jour: juste une mise à jour rapide pour dire que l'accès direct JMX a fonctionné. Cependant, j'ai aussi eu à régler Dcom.soleil.gestion.jmxremote.hôte. Je l'ai mis à localhost et il a fonctionné, cependant sans lui aucun dé. Si quelqu'un d'autre a un problème similaire en essayant d'activer JMX, je vous recommande de définir cette valeur aussi, même si vous vous connectez à partir de la machine locale. Il semble qu'il est nécessaire avec certaines versions de Tomcat.


juste une mise à jour rapide pour dire que l'accès direct JMX a fonctionné. Cependant, j'ai aussi eu à régler Dcom.soleil.gestion.jmxremote.hôte. Je l'ai mis à localhost et il a fonctionné, cependant sans lui aucun dé. Si quelqu'un d'autre a un problème similaire en essayant d'activer JMX, je vous recommande de définir cette valeur aussi, même si vous vous connectez à partir de la machine locale. Il semble que ce soit nécessaire avec certaines versions de Tomcat.

29
demandé sur Sampson 2011-09-07 16:16:01

3 réponses

accès Direct JMX

essayez d'ajouter ceci à catalina.sh/bat:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=5005
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

mise à jour: Alex P suggère que les paramètres suivants pourraient également être requis dans certaines situations:

-Dcom.sun.management.jmxremote.host=localhost

cela permet des connexions JMX anonymes à distance sur le port 5005. Vous pouvez également considérer JVisualVM qui est beaucoup plus s'il vous plaît et permet de parcourir JMX via plugin.

Ce que vous cherchez est Catalina -> ThreadPool -> http-bio-8080 - > différentes métriques.

JMX proxy servlet

plus facile méthode pourrait être D'utiliser Tomcat's JMX proxy servlet sous: http://localhost:8080/manager/jmxproxy. Par exemple, essayez cette requête:

$ curl --user tomcat:tomcat http://localhost:8080/manager/jmxproxy?qry=Catalina:name=%22http-bio-8080%22,type=ThreadPool

Un peu grepping et scripting et vous pouvez facilement et à distance surveiller votre application. Notez que tomcat:tomcat est le nom d'utilisateur/mot de passe de l'utilisateur manager-jmx rôle conf/tomcat-users.xml.

15
répondu Tomasz Nurkiewicz 2011-09-18 16:33:05

pour une solution plus enterprise. J'ai utilisé de nouvelles reliques dans notre environnement de production.

fournit un graphique des changements dans le threadpool au fil du temps.

2
répondu Tinman 2013-07-12 07:03:40

Vous pouvez déployer jolokia.la guerre et puis récupérer les valeurs mbeans dans JSON (sans le gestionnaire):

http://localhost:8080/jolokia/read/Catalina:name=*,type=pool de threads?ignoreErrors=true

si vous voulez seulement quelques valeurs (currentThreadsBusy, maxThreads, currentThreadCount, connectionCount):

http://localhost:8080/jolokia/read/Catalina:name=*,type=ThreadPool/currentThreadsBusy,maxThreads,currentThreadCount,connectionCount?ignoreErrors=true

{
    request: {
       mbean: "Catalina:name="http-nio-8080",type=ThreadPool",
       attribute: [
          "currentThreadsBusy",
          "maxThreads",
          "currentThreadCount",
          "connectionCount"
       ],
       type: "read"
    },
    value: {
       currentThreadsBusy: 1,
       connectionCount: 4,
       currentThreadCount: 10,
       maxThreads: 200
    },
    timestamp: 1490396960,
    status: 200
}

Note: Cet exemple fonctionne sur Tomcat7 +.

2
répondu c-toesca 2018-05-09 17:47:39