Apache Tomcat NIO-实际使用情况

Apache Tomcat NIO-实际使用情况,apache,tomcat,nio,Apache,Tomcat,Nio,我们一直在生产中使用Tomcat和axis2来提供SOAP服务 但是,在一些高流量的情况下,我们发现CPU一直很高 我们发现,在netstat期间,我们有很多来自外部客户机的连接 我们认为CPU高可能是由于这些线程之间的高上下文切换,因为这些线程本质上是阻塞的 因此,我们认为可以在tomcat连接器中启用NIO。我们认为这可以减少处理多个连接的线程数量 但是,当我们运行启用NIO并运行流量时,我们从线程堆栈转储中发现,ApacheTomcat中有相同数量的线程,CPU仍然很高 唯一的区别是转储中

我们一直在生产中使用Tomcat和axis2来提供SOAP服务

但是,在一些高流量的情况下,我们发现CPU一直很高

我们发现,在netstat期间,我们有很多来自外部客户机的连接

我们认为CPU高可能是由于这些线程之间的高上下文切换,因为这些线程本质上是阻塞的

因此,我们认为可以在tomcat连接器中启用NIO。我们认为这可以减少处理多个连接的线程数量

但是,当我们运行启用NIO并运行流量时,我们从线程堆栈转储中发现,ApacheTomcat中有相同数量的线程,CPU仍然很高

唯一的区别是转储中线程的名称(NIO-HTTPEXEC)

这种配置有什么问题

server.xml

<Connector port="8182" 
protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" 
connectionTimeout="20000" redirectPort="8443" /> 

由于maxThreads仍然存在,因此创建了许多线程来处理NIO和BIO中的高流量

我认为启用NIO将减少处理来自客户端的HTTP请求的线程

我是否应该在我的HTTPServlet代码中进行更改,以便真正充分使用NIO

感谢和问候,
Sashi

由于您尚未发布配置,任何人都不可能告诉您出了什么问题。但你几乎肯定找错人了。高CPU使用率将来自应用程序,而不是线程上下文切换。也离题了。为什么您认为线程上下文切换可能不会导致高CPU使用率?我现在发布了我的server.xml。与应用程序所做的所有工作相比,您可以告诉我们为什么您认为它可以。这是你的假设,不可信。好吧,我同意。但是,我希望看到并理解Tomcat的NIO和BIO连接器之间的区别。但是,由于实际工作(HTTP请求和响应)是由配置为maxThreads的工作线程处理的,所以我看不出连接器之间有什么主要区别。你找错地方了。您应该做的是分析您的应用程序,而不是猜测游戏。