2017-01-19 9 views
0

Мы сохраняем устаревшее приложение (jboss 4.2.3, ejb 3, jsp, jdk 1.6.45 64b).Jboss 4.2.3 Приложение с огромным количеством анонимных тем

Это приложение делает тяжелую использование базы данных и реагировать на

  • запрос Http Пользователь
  • запроса веб-службы
  • Некоторые соединения CORBA
  • Некоторые внешние JSM вызова
  • Некоторые внутренний процесс MDB

Http conn ection pool является стандартным (tomcat 5.5 с 250 соединениями), соединение с пулом базы данных повышается до 300 (вместо 60 стандартных).

JBoss service.xml (где isdefined резьба по умолчанию пул) является

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

Один из наших клиентов имеют плохие показатели в течение части дня.
Существует много потоков, созданных без какого-либо отношения к действиям пользователей.

Нормальная деятельность нити Счетчик 300/400 нити

  • Иногда вырастает до 4К в считанные секунды и медленно снижаться в течение нескольких минут
  • Иногда он может вырастает до 25 к резьб и занимает несколько часов, чтобы уменьшить и приложение перестает отвечать на запросы (требуется перезагрузка)

Дамп нити показывает, что все эти потоки являются RUNNABLE, но нет трассировки стека (в другой «нормальной» нити отображается обычная трассировка стека).

Все эти нити nammed «Thread-XXXXXX» и принадлежат к «JBoss складочный Темы»

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

Любые идеи?

ответ

0

Решено! Проблема связана с драйвером SQL SERVER Jdbc, наш код использует инструкцию setQueryTimeout в Statement, в драйвере есть ошибка, которая заставляет его создавать поток для каждого запроса для управления таймаутом.

см: https://connect.microsoft.com/SQLServer/feedbackdetail/view/785983/jdbc-additional-thread-for-every-query-when-using-setquerytimeout
https://connect.microsoft.com/SQLServer/feedback/details/669427/property-to-create-timer-threads-per-statement-or-connection-in-jdbc-driver

Удаление инструкции setQueryTimeout решить эту проблему.

HTH!