Мы поддерживаем устаревшее приложение (jboss 4.2.3, ejb 3, jsp, jdk 1.6.45 64b).
Это приложение интенсивно использует базу данных и отвечает на
- HTTP-запрос пользователя
- Запрос веб-службы
- Некоторые соединения CORBA
- Некоторый внешний вызов JSM
- Некоторый внутренний процесс MDB
Пул HTTP-соединений стандартный (tomcat 5.5 с 250 подключениями), подключение к пулу базы данных увеличено до 300 (вместо стандартных 60).
jboss service.xml (где определен пул потоков по умолчанию)
<mbean code="org.jboss.util.threadpool.BasicThreadPool"name="jboss.system:service=ThreadPool">
<attribute name="Name">JBoss System Threads</attribute>
<attribute name="ThreadGroupName">System Threads</attribute>
<attribute name="KeepAliveTime">60000</attribute>
<attribute name="MaximumPoolSize">10</attribute>
<attribute name="MaximumQueueSize">1000</attribute>
<attribute name="BlockingMode">run</attribute>
One of our customer have some bad performance during part of the day.
There is a lot of threads generated without any relation with the users activities.
Количество потоков обычных действий составляет 300/400 потоков.
- Иногда она увеличивается до 4k за секунды и медленно уменьшается за минуты
- Иногда он может увеличиваться до 25 тыс. потоков, и для его уменьшения требуются часы, и приложение перестает отвечать на запросы (требуется перезапуск).
Дамп потока показывает, что все эти потоки RUNNABLE , но нет трассировки стека (другие «нормальные» потоки показывают обычную трассировку стека).
Все эти потоки называются "Thread-xxxxxx" и относятся к "объединенным потокам JBoss".
Мы уверены, что эти потоки не создаются приложением, но мы не можем найти, что может быть ответственным за создание этих потоков.
Любые идеи ?