Как я могу отслеживать/регистрировать пул потоков 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.
Ответы
Ответ 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 через плагин.
То, что вы ищете, это Catalina
→ ThreadPool
→ http-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.