Tomcat、Netty、Jetty很有趣的簡單壓測報告
阿新 • • 發佈:2019-02-12
今早對Tomcat7.0.5、Netty3.2.3、Jetty-hightide-7.2.2做了一個簡單的壓測,
測試方案我想肯定是不太嚴謹的,但是對於快速評估還是有點價值的,測試結果出乎意外。
壓測工具: ApacheBench(簡稱ab), Version 2.3
測試伺服器有兩臺:
被壓測伺服器 和 執行ab的伺服器
兩臺伺服器的配置都是:
64位Linux,雙CPU,4G記憶體
Tomcat7.0.5 使用BIO(阻塞IO),最大執行緒開了200個,
Netty3.2.3和Jetty-hightide-7.2.2都使用NIO,Jetty最大執行緒開了250個。
請求總數固定是10萬,對每個請求的響應位元組數固定是1k
以下是測試結果:
第一列是最大併發數,其他三列是每妙處理的請求數,
併發500、1000時測了4次,併發2000、3000測了兩次,併發10000時測了3次。
BIO NIO NIO 併發 Tomcat Netty Jetty 500 8723 8311 4471 11270 10737 5667 11064 10986 5570 11625 10469 4688 1000 7994 8321 5021 10045 9885 5006 10162 10156 4736 9842 10166 4762 2000 8040 7803 4668 8487 8148 4562 3000 6540 6784 4528 7145 7166 4158 10000 4303 5099 3500 4558 5973 3006 4457 5037 3471
可以看出Tomcat和Netty只有達到10000併發時才開始有明顯差距,
而Jetty在併發為2000以下時都比Tomcat和Netty要差一倍,即使達到10000併發,Jetty的NIO也比Tomcat的BIO差。
從這個結果來看,我真的很懷疑在64位OS和高速區域網中是否有必要使用NIO?
補充:
Tomcat7.0.5的NIO基本上不可用,每次壓都是:
嚴重:
java.lang.OutOfMemoryError: Java heap space
at org.apache.coyote.http11.InternalNioInputBuffer.<init>(InternalNioInputBuffer.java:58)
at org.apache.coyote.http11.Http11NioProcessor.<init>(Http11NioProcessor.java:77)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.createProcessor(Http11NioProtoc
ol.java:435)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:
363)
at org.apache.tomcat .util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1526)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "http-8080-exec-321" java.lang.OutOfMemoryError: Java heap space
SEVERE:Memory usage is low, parachute is non existent, your system may start failing.