Как я могу отслеживать / регистрировать пул потоков Tomcat?

У меня есть установка Tomcat, где я подозреваю, что пул потоков может уменьшаться с течением времени из-за того, что потоки не освобождаются должным образом. Я получаю ошибку в catalina.когда maxthreads достигнут, но я хотел бы регистрировать количество используемых потоков в файле каждые пять минут, чтобы я мог проверить эту гипотезу. Кто-нибудь может посоветовать, как это можно сделать?

также в этой установке нет менеджера Tomcat, кажется, тот, кто сделал оригинал установка по какой-то причине удалила manager webapp. Я не уверен, что менеджер сможет сделать это выше или если я могу переустановить его без повреждения существующей установки? Все, что я действительно хочу сделать, это отслеживать пул потоков.

кроме того, я заметил, что maxthreads для Tomcat составляет 200, но максимальное количество параллельных соединений для Apache ниже (Apache использует mod_proxy и mod_proxy_ajp (AJP 1.3) для подачи Tomcat). Это тоже кажется неправильным, каковы правильные отношения между этими числами?

любая помощь очень ценится :D

обновление: просто быстрое обновление, чтобы сказать, что прямой доступ JMX работал. Однако мне также пришлось установить Dcom.солнце.управление.jmxremote.хозяин. Я установил его на localhost, и он работал, однако без него никаких костей. Если у кого-то еще есть аналогичная проблема с включением JMX, я рекомендую вам также установить это значение, даже если вы подключаетесь с локального компьютера. Кажется, это требуется с некоторыми версиями Кот.


просто быстрое обновление, чтобы сказать, что прямой доступ JMX работал. Однако мне также пришлось установить Dcom.солнце.управление.jmxremote.хозяин. Я установил его на localhost, и он работал, однако без него никаких костей. Если у кого-то еще есть аналогичная проблема с включением JMX, я рекомендую вам также установить это значение, даже если вы подключаетесь с локального компьютера. Кажется, это требуется с некоторыми версиями Tomcat.

3 ответов


прямой доступ JMX

попробуйте добавить это 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

обновление: Алекс Р предположим, что в некоторых ситуациях также могут потребоваться следующие настройки:

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

это включает удаленные анонимные соединения JMX на порту 5005. Вы также можете рассмотреть JVisualVM, который намного больше, пожалуйста, и позволяет просматривать JMX через плагин.

то, что вы ищете Catalina ->ThreadPool ->http-bio-8080 -> различные интересные показатели.

JMX прокси сервлет

более простым методом может быть использование Tomcat's JMX прокси сервлет в: http://localhost:8080/manager/jmxproxy. Например, попробуйте этот запрос:

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

немного grepping и скрипты, и вы можете легко и удаленно контролировать приложения. Обратите внимание, что tomcat:tomcat имя пользователя/пароль пользователя, имеющего manager-jmx роль conf/tomcat-users.xml.


для более бизнес-решение. Я использовал New Relic в нашей производственной среде.

Это предоставляет график изменений в threadpool с течением времени.


вы можете развернуть jolokia.война!--3--> а затем получить значения mbeans в JSON (без менеджера):

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

Если вы хотите только некоторые значения (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
}

Примечание: этот пример работает на Tomcat7 +.