Подтвердить что ты не робот

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

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

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

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

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

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


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

4b9b3361

Ответ 1

Прямой доступ к 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

ОБНОВЛЕНИЕ: Alex P полагает, что в некоторых ситуациях также могут потребоваться следующие настройки:

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

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

То, что вы ищете, это CatalinaThreadPoolhttp-bio-8080 → различные интересные показатели.

Прокси-сервер JMX

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

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

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

Ответ 2

Для более корпоративного решения. Я использую New Relic в нашей производственной среде.

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

Ответ 3

Вы можете развернуть jolokia.war, а затем получить значения mbeans в JSON (без менеджера):

http://localhost: 8080/jolokia/read/Catalina: name= "http-nio-8080" , type = ThreadPool? ignoreErrors = истинные

Если вам нужны только некоторые значения (currentThreadsBusy, maxThreads, currentThreadCount, connectionCount):

http://localhost: 8080/jolokia/read/Catalina: name= "http-nio-8080" , type = ThreadPool/currentThreadsBusy, MaxThreads, currentThreadCount, IgnoreErrors connectionCount? = верно

{
    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
}

Примечание. Этот пример работает на Tomcat8. Название Mbean может быть "http- bio -8080" на tomcat 7.