2013-03-12 3 views
2

WSO2 ESB не загружает все прокси (более 20). Затем мы увеличили следующие два значения в сценарии запуска, и она работала:Как установить ThreadPool (Dsnd_t_max) в WSO2 ESB

-Dsnd_t_core=120 
-Dsnd_t_max=600 

Но мы столкнулись с несколькими фатальных проблемами с WSO2 ESB. Несколько прокси-серверов JMS были заблокированы и больше не потребляли сообщения. Хуже всего: NO ERROR в carbon.log!

Кроме того, загрузка процессора на сервер достигла 100%.

Рестарт не решает проблему, только дезактивация запланированных задач или прокси-серверов разрешает проблему.

Теперь мы обнаружили, что прокси VFS создает ровно 120 потоков (JConsole). С каждым транспортом.PollInterval создается новый поток.

Какие значения вы используете для -Dsnd_t_core и max?

Почему прокси-сервер VFS создает новый поток (см. Jconsole) a t each PollInterval?

ответ

1

До тех пор, как я знаю, нить WSO2 ESB основана на java.util.concurrent ThreadPool.

В этом link вы можете прочитать о некоторых характеристиках ThreadPool, например, когда он будет создавать новый поток, механизм очереди и отклонить политику задачи.

Какие значения вы используете для -Dsnd_t_core и max?
-Dsnd_t_core - это минимальное количество потоков внутри ThreadPool. Таким образом, WSO2 ESB автоматически создаст поток столько, сколько вы установили -Dsnd_t_core. Значение по умолчанию - 20. WSO2 ESB создаст 20 vfs-worker, если вы не укажете -Dsnd_t_core.
-Dsnd_t_max - максимальное количество потоков внутри ThreadPool. WSO2 ESB прекратит создание нового потока, если будет достигнуто максимальное число.

Почему прокси-сервер VFS создает новый поток (см. Jconsole) и каждый опрос?
WSO2 ESB создает новый поток в этих условиях:

  • Если меньше corePoolSize потоков работают, Исполнитель всегда предпочитает добавлять новый поток, а не массового обслуживания.
  • Если запущено corePoolSize или больше потоков, Executor всегда предпочитает очередность запроса, а не добавление нового потока.
  • Если запрос не может быть поставлен в очередь, создается новый поток, если это не будет превышать maximumPoolSize, и в этом случае задача будет отклоняться .

Таким образом, до тех пор, как ваша очередь заполнена, а максимальное количество потоков не будет достигнуто, WSO2 создаст новый поток для обработки процесса. PollInterval установлен для указания задержки, прежде чем ваша служба начнет опроса сообщения или файла из исходной папки.

Вы можете установить номер maxQueue в unbound (-1), чтобы очередь никогда не была заполнена, и новый поток никогда не будет создан.

Я также нашел что-то с JConsole. 1 услуга/1 прокси-сервис будет обрабатываться только одним потоком. Я все еще пытаюсь понять это и сделать 1 сервис/1 прокси-сервис обрабатывается двумя или более потоками (многопоточными).

Надеюсь, что это поможет ответить на ваш вопрос :)

+0

Хороший ответ и кажется логикой. Но одна вещь, которую я не понимаю, создает новый поток на каждом PollInterval, даже если очередь пуста - это странно. И тезисы тегов будут в режиме WAIT и продолжаться, даже если у них никогда не было сообщения ... – FiveO

Смежные вопросы