【发布时间】:2020-09-02 17:19:56
【问题描述】:
我在四核 Linux 机器上使用 Netty I/O 库运行 Http 服务器。使用默认工作线程池大小(在 Netty 内部设置为 2 x 内核数)运行,性能分析显示吞吐量上限为 1k 请求/秒,并且请求率的进一步增加导致延迟几乎呈线性增加。
由于最大 CPU 利用率显示为 60%,我按照下面的代码增加了工作线程的数量。但是,性能几乎没有任何变化,CPU 仍被限制在 60-70%。该进程不受内存、I/O 或网络带宽的限制。为什么增加工作线程不会改变性能?我还能做些什么来提高服务器性能以增加其容量。
EventLoopGroup group = new NIOEventLoopGroup(100);
ServerBootStrap serverBootStrap = new ServerBootStrap();
serverBootStrap.group(group)
.channel(NioServerSocketChannel.class)
.localAddress(..)
...
【问题讨论】:
-
是什么让您确定进程不受内存、I/O 或网络带宽的限制?
-
我捕获机器上的各种统计数据并将它们导出到度量服务器进行分析(prometheus)。这些包括内存/堆使用、交换使用、网络 I/O 等。一切都远低于 40%。
标签: multithreading performance netty