1.硬件環境:
物理總內存:16G
物理CPU個數:2
CPU內核數:1
2.軟件環境:
操作系統版本:CentOS release 6.9
jdk版本:jdk1.7.0_09
servlet版本:servlet-api 2.5
jfinal版本:jfinal-1.9
虛擬機配置:
JAVA_OPTS='-server -Xmx1024m -Xms1024m -Xss512k -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewG C -XX:+PrintGCDetails -Dcom.sun.management.jmxremote.port=8087 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'
tomcat配置:
<Connector executor="tomcatThreadPool" port="8829" enableLookups="false" protocol="org.apache.coyote.http11.Http11NioProtocol" acceptorThreadCount="4" selectorPool.maxSelectors="4" connectionTimeout="5000" redirectPort="8443" URIEncoding="utf-8"/>
3.測試數據:
從ling使用apache的ab工具發送get請求,請求數據128字節,響應數據1024字節,不解析響應數據
jfinal測試如下
併發數 | 總請求數 | CPU | 成功次數 | 失敗次數 | 請求速率 | 響應速率 | 平均響應時間(ms) | 服務器狀態 |
---|---|---|---|---|---|---|---|---|
10 | 10000 | 70%~120% | 10000 | 0 | 3595/s | 3600/s | 2.782 | 可用 |
50 | 50000 | 120%~140% | 50000 | 0 | 4577/s | 4600/s | 10.924 | 可用 |
100 | 100000 | 120%~150% | 100000 | 0 | 4833/s | 4800/s | 20.689 | 可用 |
150 | 150000 | 130%~170% | 150000 | 0 | 5034/s | 5100/s | 29.798 | 可用 |
200 | 200000 | 130%~160% | 200000 | 0 | 5106/s | 5200/s | 39.170 | 可用 |
250 | 250000 | 130%~150% | 250000 | 0 | 5539/s | 5500/s | 45.138 | 可用 |
servlet測試如下
併發數 | 總請求數 | CPU | 成功次數 | 失敗次數 | 請求速率 | 響應速率 | 平均響應時間(ms) | 服務器狀態 |
---|---|---|---|---|---|---|---|---|
10 | 10000 | 60%~120% | 10000 | 0 | 3991/s | 4000/s | 2.505 | 可用 |
50 | 50000 | 120%~140% | 50000 | 0 | 4940/s | 5050/s | 9.895 | 可用 |
100 | 100000 | 120%~150% | 100000 | 0 | 5251/s | 5300/s | 19.046 | 可用 |
150 | 150000 | 120%~150% | 150000 | 0 | 5619/s | 5550/s | 26.697 | 可用 |
200 | 200000 | 130%~150% | 200000 | 0 | 5597/s | 5600/s | 35.735 | 可用 |
250 | 250000 | 130%~160% | 250000 | 0 | 5688/s | 5750/s | 43.948 | 可用 |
結論:在併發數與請求量較少情況下,jfinal與servlet性能差距並不是很大;但隨着請求量與併發數增加,servlet對於jfinal性能上會好那麼一點,因此若按目前機器配置,單機5000/s以下請求,兩者沒什麼差異,jfinal更合適,畢竟開發效率較servlet高;5000/s以上權衡開發效率與性能再決定使用