Блокировка потоков при регистрации канала - PullRequest
0 голосов
/ 05 марта 2019

После того, как мое приложение работает некоторое время, мои потоки застревают во время ожидания регистрации канала.

Вот код:

bootstrap = new Bootstrap()
    .group(new EpollEventLoopGroup())
    .channel(EpollSocketChannel.class)
    .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
    .handler(new MyChannelInitializer(this));

ChannelFuture registerFuture = bootstrap.register().sync();
Channel channel = registerFuture.channel();

//Do other stuffs

channel.connect(...).addListener(...);

Через некоторое времяблокировка потоков во время sync().

Вот трассировка стека:

Name: worker-thread-1
State: WAITING on io.netty.channel.DefaultChannelPromise@17ba258
Total blocked: 37  Total waited: 43,574

Stack trace: 
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
io.netty.util.concurrent.DefaultPromise.await(DefaultPromise.java:231)
io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:131)
io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:30)
io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:337)
io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119)
io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30)
...
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)  
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

Почему мой поток заблокирован здесь?Соединения пока нет, только создание канала и его регистрация в цикле событий.

...