测试 Tomcat BIO 和 NIO 连接器之间的性能

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

我想观察在 Apache Tomcat 上使用 NIO 连接器与 BIO 连接器的性能改进。 BIO 和 NIO 之间的区别是,(引用自DZONE),

BIO 连接器(阻塞 I/O)是阻塞的 – 它使用线程池 每个线程接收请求、处理请求、响应,然后 回到泳池。

NIO 连接器(非阻塞 I/O)使用 java NIO 库和 请求之间的多路复用。它有两个线程池——一个保存 轮询器线程,处理所有传入请求并推送这些请求 由工作线程处理的请求,保存在另一个池中。

我从文档中了解到,Apache Tomcat 7 默认使用 BIO,但可以配置为与 NIO 连接器一起使用。从 Apache Tomcat 8.5 开始,BIO 连接器被完全删除,考虑到 NIO 是非阻塞的,NIO 是默认值。

为了可视化/比较 BIO 和 NIO 连接器的性能,我设置了一个具有 REST API 的测试应用程序,该应用程序在等待 1-30 秒之间的随机时间段后提供响应,并且该测试应用程序部署在 Apache Tomcat 7 上。我在 server.xml 文件的“Executor”部分下设置了 maxThread=300、minSpareThreads=10。

我改变了 BIO 和 NIO 之间设置连接器协议(在 settings.xml 中)之间的测试,并通过 Jmeter 在 60 秒窗口内分散了 5000 个请求的负载来运行测试,并观察了 Jconsole 上的线程和 CPU 消耗,我改变了测试与 BIO 连接器相比,我希望看到 NIO 消耗更少的线程数,但我最终得到了两种情况(NIO 或 BIO)的类似结果。

我想弄清楚我需要遵循的特定测试用例场景,以便我观察到 NIO 在 Apache Tomcat 7 上比 BIO 连接器表现更好。如果有人能给我指出正确的方向,我将不胜感激。

java tomcat tomcat7 nio
1个回答
0
投票

我认为按照目前的问题编写方式不可能给出正确答案。在进行压力测试时,NIO 可能会比 BIO 表现得更好。但一如既往,需要进行测试来确认。

我的建议是不要尝试在抽象用例中测试 NIO 与 BIO。在现实生活条件下测试您的现实生活应用程序。这将使您更好地了解哪种配置更适合您的每种类型的现有应用程序。

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