我们一直在生产中使用Tomcat和axis2作为SOAP服务。
但是,在一些高流量的情况下,我们发现CPU一直很高。
我们发现netstat在那段时间内,我们有很多来自外部客户端的连接。
我们认为CPU高可能是由于这些线程之间的高上下文切换,因为这些线程本质上是阻塞的。
因此,我们认为我们可以在tomcat连接器中启用NIO。我们认为这可以减少处理多个连接的线程数。
但是,当我们运行启用NIO并运行流量时,我们从线程堆栈转储中发现apache tomcat中的线程数量相同且CPU仍然很高。
唯一的区别是转储中的线程名称(NIO - http-exec)。
此配置有什么问题?
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