Netty темы блокируются - PullRequest
       12

Netty темы блокируются

0 голосов
/ 22 декабря 2011

В моей системе 3 ThreadPoolExecutors.

Один для основного процесса Netty, другой для рабочего процесса netty и последний для обработки ad-hoc (отправка запроса на почтовый сервер).

 ExecutorService bossExecutors = Executors.newFixedThreadPool(1, new
 ServerThreadFactory("netty-boss")); ExecutorService workerExecutors =
 Executors.newFixedThreadPool(10, new
 ServerThreadFactory("netty-worker"));
          ChannelFactory factory = new NioServerSocketChannelFactory(
                 bossExecutors, 
                 workerExecutors,
                 Runtime.getRuntime().availableProcessors());

 ExecutorService mailExecutor = Executors.newFixedThreadPool(40);

Это прекрасно работает, пока mailExecutor не отправит запрос на почтовый сервер.До тех пор, пока пакетные запросы с использованием mailExecutor, обычно выполнение 5000+ запросов к почтовому серверу, не будут завершены, потоки netty блокируются.

Я не понимаю, почему потоки netty, похоже, блокируются в этот раз, так как явыделил определенные пулы потоков.В течение этого времени Нетти даже не может обработать один запрос.

Есть идеи, почему это происходит или что я делаю неправильно?

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Можете ли вы предоставить дамп потока?

jstack <pid>

Кроме того, вы никогда не должны использовать фиксированный пул потоков для пула потоков worker / poss.Используйте кэшированный, таким образом вы можете быть уверены, что никогда не попадете в голод.Вы должны указать количество рабочих с аргументом 3 в конструкторе.

0 голосов
/ 22 декабря 2011

Звучит как проблема с расписанием. У вас 40 потоков под большой нагрузкой, по сравнению с числом доступных процессоров для обработки работы Netty (каково количество доступных процессоров () на момент создания фабрики?).

Так что может случиться так, что потоков Netty слишком мало, и они страдают от голода, так как они никогда не выбираются для выполнения по сравнению с 40 потоками, обрабатывающими почту.

Возможно также, что по какой-то причине ваши рабочие потоки заблокированы по окончании почтовых потоков, возможно, из-за какого-то общего объекта, с которым выполняется синхронизация (есть ли какая-то очередь или список сообщений, которые должны быть отправлены, потоки netty нужно написать, а какие почтовые потоки заблокировали при отправке?

...