How can I monitor/log Tomcat's thread pool? How can I monitor/log Tomcat's thread pool? multithreading multithreading

How can I monitor/log Tomcat's thread pool?


Direct JMX access

Try adding this to 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

UPDATE: Alex P suggest that the following settings might also be required in some situations:

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

This enables remote anonymous JMX connections on port 5005. You may also consider JVisualVM which is much more please and allows to browse JMX via plugin.

What you are looking for is Catalina -> ThreadPool -> http-bio-8080 -> various interesting metrics.

JMX proxy servlet

Easier method might be to use Tomcat's JMX proxy servlet under: http://localhost:8080/manager/jmxproxy. For instance try this query:

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

A little bit of grepping and scripting and you can easily and remotely monitor your application. Note that tomcat:tomcat is the username/password of user having manager-jmx role in conf/tomcat-users.xml.


You can deploy jolokia.war and then retrieve mbeans values in JSON (without the manager):

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

If you want only some values (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: This example works on Tomcat7 +.


For a more enterprise solution. I have been using New Relic in our production environment.

This provides a graph of the changes to the threadpool over time.