В моей системе 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, похоже, блокируются в этот раз, так как явыделил определенные пулы потоков.В течение этого времени Нетти даже не может обработать один запрос.
Есть идеи, почему это происходит или что я делаю неправильно?
Спасибо.