1. 程式人生 > >Tomcat、Netty、Jetty很有趣的簡單壓測報告

Tomcat、Netty、Jetty很有趣的簡單壓測報告

今早對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.