Как узнать, в каком веб-приложении tomcat есть утечка потоков? - PullRequest
0 голосов
/ 27 апреля 2018

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

Вопрос: Что такое хороший способ / инструмент, чтобы узнать, у какого из 3 веб-приложений есть утечка потоков?

Мои навыки Java очень ржавые. Я не очень знаком с Tomcat, и открываю для себя все время. Я запустил jconsole, чтобы узнать об утечке потока. Я не хочу устанавливать дополнительные (или не стандартные) инструменты для устранения этой проблемы, поскольку это производственная система.

На скриншоте jconsole ниже вы можете видеть, как увеличивается количество потоков; процесс Tomcat / Catalina был остановлен в 08:52, через пару минут после того, как число потоков превысило 893 потока.

jconsole

По запросу,

  • элемент Connector: <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads = "600" minSpareThreads = "150" acceptCount = "150" connectionTimeout = "30000" />

  • от "Tomcat crash", я имею в виду, что больше событий не регистрируется в файле catalina.log, а также ни в одном из файлов журналов 3 веб-приложений. Только лежащий в основе apache регистрирует события с ошибками HTTP 500.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Не уверен, что у вас есть возможность развернуть новый код в системе.

Самое простое изменение, которое помогло мне в аналогичной ситуации - также с использованием tomcat, - это дать каждому исполнителю / threadpool / thread значимое имя, которое можно было бы отследить до веб-приложения и модуля, который создал тему.

Вуаля, дампы ниток внезапно выглядели дружелюбно. Это было сделано в крайнем случае, через guava / ThreadFactoryBuilder .

0 голосов
/ 27 апреля 2018

Запустите каждое из веб-приложений в отдельном экземпляре Tomcat. Вероятно, перед Tomcat у вас есть какой-то экземпляр nginx / Apache, балансировщик нагрузки или что-то в этом роде, и вы можете перенастроить его так, чтобы он указывал на отдельные Tomcats для каждого веб-приложения.

...