增加工作线程对Netty IO性能没有影响。

问题描述 投票:0回答:1

我在一台四核Linux机器上使用Netty IO库运行Http服务器。使用默认的工作线程池大小(Netty内部设置为2×核心数)运行,性能分析显示吞吐量上限为1k请求秒,进一步增加请求率导致延迟几乎线性增加。

由于最大CPU利用率显示为60%,我按照下面的代码增加了工作线程的数量。然而,性能几乎没有任何变化,CPU仍然被限制在60-70%。这个过程不受内存、IO或网络带宽的限制。为什么增加工作线程没有改变性能?我还可以做什么事情来提高我的服务器性能来增加它的容量。

EventLoopGroup group = new NIOEventLoopGroup(100);
ServerBootStrap serverBootStrap = new ServerBootStrap();
serverBootStrap.group(group)
               .channel(NioServerSocketChannel.class)
               .localAddress(..)
               ...
multithreading performance netty
1个回答
0
投票

如果你的代码使用的是纯非阻塞IO,那么在四核的情况下,你的TPS应该可以达到1k以上。你应该分析Netty线程在做什么,即它们是否被事件循环中的任何调用所阻塞。VisualVM应该已经给你一个很好的想法,比如这里你可以看到Vert.x线程,它在幕后使用Netty睡觉。

enter image description here

你还可以尝试禁用超线程,检查CPU利用率的情况。https:/serverfault.comquestions235825disable-hyperthreading-from-within-linux-no-access-to-bios.

© www.soinside.com 2019 - 2024. All rights reserved.