私はnetty上でサーバを稼働しており、しばらくしてからJavaサーバアプリケーションによって初期化されたスレッドがCPUの100%を食べ始めていることが分かりました。ボスとワーカーグループをスレッド数を変えて初期化しようとしましたが、結果は同じです。nettyはCPUの100%を食べます
何故その理由が考えられますか?
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup(50);
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast("ReadTimeOutHandler", new ReadTimeoutHandler(20));
ch.pipeline().addLast(new streamDecoder());
ch.pipeline().addLast(new streamEncoder());
ch.pipeline().addLast(new validationHandler());
ch.pipeline().addLast(new streamDecryptor());
ch.pipeline().addLast(new streamEncryptor());
ch.pipeline().addLast(new msgValidatedHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
どのスレッドが100%CPUを使用していますか?彼らはNettyのスレッドですか?また、なぜworkergroupのための50スレッド? – Sneh
私はスレッドの数が絶えず増加し、減少していないことがわかります。 多数の同時接続の高速処理のために、ワーカーグループ用のスレッドが50個設定されていました。しかし、5作品はかなり良いものに減少しました。 – George
実行しているコードを確認するためにスレッドダンプを作成しようとしましたか? –