tomcat连接器(conncector)可以配置成NIO方式
今天没事对IO和NIO分别做了下测试
配置如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
executor="tomcatThreadPool" />
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
主要测试两类资源:
动态页面(带数据库查询,偏重IO和cpu)
静态页面(无数据库操作,主要考察处理简单请求的能力)
结果如下:
动态页面
并发数 100 200 300 400 600 800
IO 206 215 209 205 210 206
NIO 192 194 189 194 195 191
静态页面
并发数 100 200 300 400 600 800
IO 941 306 361 361 347 400
NIO 927 313 318 703 286 914
可以看出在处理动态资源时NIO的优势并不明显甚至还不如IO,其主要原因是动态资源,是IO和cpu密集型操作,导致很多请求都阻塞在CPU和IO上,所以socket IO只能干等着,发挥不出NIO的优势
再看处理静态时NIO的表现,虽然不稳定但性能的提升还是很明显的,所以NIO常常用来处理请求多并且处理起来比较简单的应用中,如memcached