<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
附带环境配置如下:
环境配置如下: (jdk没有用 -server)
- windows 2003 企业版 sp2
- Intel(R) Xeon(R) 4 CPU 5130 @ 2.0GHz 4.00GB 内存
- apache_2.2.8-win32-x86
- mod_jk-apache-2.0.59
- jdk-1_5_0_14-windows-i586-p.exe -client
- Tomcat-6.0.16 + apr
windows 2003 企业版 sp2
Intel(R) Xeon(R) 4 CPU 5130 @ 2.0GHz 4.00GB 内存
apache_2.2.8-win32-x86
mod_jk-apache-2.0.59
jdk-1_5_0_14-windows-i586-p.exe -client
Tomcat-6.0.16 + apr
server.xml
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="2000" minSpareThreads="1000"/>
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="2000"
- redirectPort="8443" enableLookups="false"
- acceptCount="5000" maxThreads="2000"/>
catalina.bat
- set JAVA_OPTS=-Xms1400m -Xmx1400m -Djava.awt.headless=true
set JAVA_OPTS=-Xms1400m -Xmx1400m -Djava.awt.headless=true
index.jsp (除了下面这些代码,还有200行html代码,没有一个图片)
- <%
- for(int i=0;i<1000;i++){
- request.setAttribute("key_"+i,"value_"+i);
- }
- for(int i=0;i<100;i++){
- request.getSession().setAttribute("key_"+i,"value_"+i);
- }
- %>
- <br />
- <%=request.getSession().getAttribute("key_0")%>
- <%=request.getSession().getAttribute("key_0")%>
- <%=request.getSession().getAttribute("key_0")%>
- <%=request.getSession().getAttribute("key_0")%>
- <%=request.getSession().getAttribute("key_0")%>
- <%=request.getSession().getAttribute("key_0")%>
<%
for(int i=0;i<1000;i++){
request.setAttribute("key_"+i,"value_"+i);
}
for(int i=0;i<100;i++){
request.getSession().setAttribute("key_"+i,"value_"+i);
}
%>
<br />
<%=request.getSession().getAttribute("key_0")%>
<%=request.getSession().getAttribute("key_0")%>
<%=request.getSession().getAttribute("key_0")%>
<%=request.getSession().getAttribute("key_0")%>
<%=request.getSession().getAttribute("key_0")%>
<%=request.getSession().getAttribute("key_0")%>
tomat 启动信息如下:
- 2008-5-6 17:54:52 org.apache.catalina.core.AprLifecycleListener init
- 信息: Loaded APR based Apache Tomcat Native library 1.1.10.
- 2008-5-6 17:54:52 org.apache.catalina.core.AprLifecycleListener init
- 信息: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], r
- andom [true].
- 2008-5-6 17:54:52 org.apache.coyote.http11.Http11AprProtocol init
- 信息: Initializing Coyote HTTP/1.1 on http-8080
- 2008-5-6 17:54:52 org.apache.coyote.ajp.AjpAprProtocol init
- 信息: Initializing Coyote AJP/1.3 on ajp-30008
- 2008-5-6 17:54:52 org.apache.catalina.startup.Catalina load
- 信息: Initialization processed in 973 ms
- 2008-5-6 17:54:52 org.apache.catalina.core.StandardService start
- 信息: Starting service Catalina
- 2008-5-6 17:54:52 org.apache.catalina.core.StandardEngine start
- 信息: Starting Servlet Engine: Apache Tomcat/6.0.16
- 2008-5-6 17:54:52 org.apache.coyote.http11.Http11AprProtocol start
- 信息: Starting Coyote HTTP/1.1 on http-8080
- 2008-5-6 17:54:53 org.apache.coyote.ajp.AjpAprProtocol start
- 信息: Starting Coyote AJP/1.3 on ajp-30008
- 2008-5-6 17:54:53 org.apache.catalina.startup.Catalina start
- 信息: Server startup in 310 ms
2008-5-6 17:54:52 org.apache.catalina.core.AprLifecycleListener init
信息: Loaded APR based Apache Tomcat Native library 1.1.10.
2008-5-6 17:54:52 org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], r
andom [true].
2008-5-6 17:54:52 org.apache.coyote.http11.Http11AprProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2008-5-6 17:54:52 org.apache.coyote.ajp.AjpAprProtocol init
信息: Initializing Coyote AJP/1.3 on ajp-30008
2008-5-6 17:54:52 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 973 ms
2008-5-6 17:54:52 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2008-5-6 17:54:52 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.16
2008-5-6 17:54:52 org.apache.coyote.http11.Http11AprProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2008-5-6 17:54:53 org.apache.coyote.ajp.AjpAprProtocol start
信息: Starting Coyote AJP/1.3 on ajp-30008
2008-5-6 17:54:53 org.apache.catalina.startup.Catalina start
信息: Server startup in 310 ms
-----------------------------------------------------------------------------------------
下面是测试结果:
tomcat + apache 测试结果:
- D:/Apache2.2/bin>ab -n 10000 -c 800 http://127.0.0.1/index.jsp
- Server Software: Apache/2.2.4
- Server Hostname: 127.0.0.1
- Server Port: 80
- Document Path: /index.jsp
- Document Length: 41078 bytes
- Concurrency Level: 800
- Time taken for tests: 34.46875 seconds
- Complete requests: 10000
- Failed requests: 0
- Write errors: 0
- Total transferred: 413090000 bytes
- HTML transferred: 410780000 bytes
- Requests per second: 293.71 [#/sec] (mean)
- Time per request: 2723.750 [ms] (mean)
- Time per request: 3.405 [ms] (mean, across all concurrent requests)
- Transfer rate: 11848.61 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 1.8 0 15
- Processing: 15 2034 3425.1 921 23265
- Waiting: 0 2025 3423.8 921 23250
- Total: 15 2034 3425.1 921 23265
- Percentage of the requests served within a certain time (ms)
- 50% 921
- 66% 1343
- 75% 1656
- 80% 1875
- 90% 5078
- 95% 9421
- 98% 15828
- 99% 18171
- 100% 23265 (longest request)
- D:/Apache2.2/bin>ab -n 10000 -c 1000 http://127.0.0.1/index.jsp
- Server Software: Apache/2.2.4
- Server Hostname: 127.0.0.1
- Server Port: 80
- Document Path: /index.jsp
- Document Length: 323 bytes
- Concurrency Level: 1000
- Time taken for tests: 24.265625 seconds
- Complete requests: 10000
- Failed requests: 3953
- (Connect: 0, Length: 3953, Exceptions: 0)
- Write errors: 0
- Non-2xx responses: 8686
- Total transferred: 58651479 bytes
- HTML transferred: 56541921 bytes
- Requests per second: 412.11 [#/sec] (mean)
- Time per request: 2426.563 [ms] (mean)
- Time per request: 2.427 [ms] (mean, across all concurrent requests)
- Transfer rate: 2360.38 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 1.7 0 15
- Processing: 0 1573 4416.4 31 23984
- Waiting: 0 1563 4402.5 31 23984
- Total: 0 1573 4416.5 31 23984
- Percentage of the requests served within a certain time (ms)
- 50% 31
- 66% 62
- 75% 62
- 80% 62
- 90% 7031
- 95% 13234
- 98% 18218
- 99% 19859
- 100% 23984 (longest request)
D:/Apache2.2/bin>ab -n 10000 -c 800 http://127.0.0.1/index.jsp
Server Software: Apache/2.2.4
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /index.jsp
Document Length: 41078 bytes
Concurrency Level: 800
Time taken for tests: 34.46875 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 413090000 bytes
HTML transferred: 410780000 bytes
Requests per second: 293.71 [#/sec] (mean)
Time per request: 2723.750 [ms] (mean)
Time per request: 3.405 [ms] (mean, across all concurrent requests)
Transfer rate: 11848.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.8 0 15
Processing: 15 2034 3425.1 921 23265
Waiting: 0 2025 3423.8 921 23250
Total: 15 2034 3425.1 921 23265
Percentage of the requests served within a certain time (ms)
50% 921
66% 1343
75% 1656
80% 1875
90% 5078
95% 9421
98% 15828
99% 18171
100% 23265 (longest request)
D:/Apache2.2/bin>ab -n 10000 -c 1000 http://127.0.0.1/index.jsp
Server Software: Apache/2.2.4
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /index.jsp
Document Length: 323 bytes
Concurrency Level: 1000
Time taken for tests: 24.265625 seconds
Complete requests: 10000
Failed requests: 3953
(Connect: 0, Length: 3953, Exceptions: 0)
Write errors: 0
Non-2xx responses: 8686
Total transferred: 58651479 bytes
HTML transferred: 56541921 bytes
Requests per second: 412.11 [#/sec] (mean)
Time per request: 2426.563 [ms] (mean)
Time per request: 2.427 [ms] (mean, across all concurrent requests)
Transfer rate: 2360.38 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.7 0 15
Processing: 0 1573 4416.4 31 23984
Waiting: 0 1563 4402.5 31 23984
Total: 0 1573 4416.5 31 23984
Percentage of the requests served within a certain time (ms)
50% 31
66% 62
75% 62
80% 62
90% 7031
95% 13234
98% 18218
99% 19859
100% 23984 (longest request)
tomcat 单独测试结果 (250并发会经常失败,200比较正常,偶尔有少量错误):
- D:/Apache2.2/bin>ab -n 1000 -c 250 http://127.0.0.1:8080/index.jsp
- This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Copyright 2006 The Apache Software Foundation, http://www.apache.org/
- Benchmarking 127.0.0.1 (be patient)
- Completed 100 requests
- Send request failed!
- Send request failed!
- Send request failed!
- Send request failed!
- Send request failed!
- Completed 200 requests
- Send request failed!
- apr_socket_recv: 远程主机强迫关闭了一个现有的连接。 (730054)
- Total of 223 requests completed
- D:/Apache2.2/bin>ab -n 1000 -c 250 http://127.0.0.1:8080/index.jsp
- Server Software: Apache-Coyote/1.1
- Server Hostname: 127.0.0.1
- Server Port: 8080
- Document Path: /index.jsp
- Document Length: 41078 bytes
- Concurrency Level: 250
- Time taken for tests: 2.390625 seconds
- Complete requests: 1000
- Failed requests: 0
- Write errors: 0
- Total transferred: 41292000 bytes
- HTML transferred: 41078000 bytes
- Requests per second: 418.30 [#/sec] (mean)
- Time per request: 597.656 [ms] (mean)
- Time per request: 2.391 [ms] (mean, across all concurrent requests)
- Transfer rate: 16867.56 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 1.9 0 15
- Processing: 109 575 314.1 515 1218
- Waiting: 62 550 315.0 453 1156
- Total: 109 575 314.1 515 1218
- Percentage of the requests served within a certain time (ms)
- 50% 515
- 66% 609
- 75% 921
- 80% 1031
- 90% 1062
- 95% 1125
- 98% 1140
- 99% 1140
- 100% 1218 (longest request)
D:/Apache2.2/bin>ab -n 1000 -c 250 http://127.0.0.1:8080/index.jsp
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Send request failed!
Send request failed!
Send request failed!
Send request failed!
Send request failed!
Completed 200 requests
Send request failed!
apr_socket_recv: 远程主机强迫关闭了一个现有的连接。 (730054)
Total of 223 requests completed
D:/Apache2.2/bin>ab -n 1000 -c 250 http://127.0.0.1:8080/index.jsp
Server Software: Apache-Coyote/1.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /index.jsp
Document Length: 41078 bytes
Concurrency Level: 250
Time taken for tests: 2.390625 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 41292000 bytes
HTML transferred: 41078000 bytes
Requests per second: 418.30 [#/sec] (mean)
Time per request: 597.656 [ms] (mean)
Time per request: 2.391 [ms] (mean, across all concurrent requests)
Transfer rate: 16867.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.9 0 15
Processing: 109 575 314.1 515 1218
Waiting: 62 550 315.0 453 1156
Total: 109 575 314.1 515 1218
Percentage of the requests served within a certain time (ms)
50% 515
66% 609
75% 921
80% 1031
90% 1062
95% 1125
98% 1140
99% 1140
100% 1218 (longest request)
单独测试tomcat基本上只能达到240+左右的并发,tomcat+apache 900+并发,如果是静态页面tomcat并发1000+没有任何问题。
tomcat基本上都保持在 20% - 45% 之间 , 内存在 80M -- 600M +之间 ,根据并发和请求的大小,内存的变法比较明显,cpu基本保存在这里,apache占用的cpu基本上是在 15% - 40%。
因为JRockit收费,所以就没有测试。(主要是真实部署的时候会采用这些配置,收费的公司目前也不会购买!^_^)
不知道大家如何配置tomcat能并发1000左右 ????????
robbin回复如下:
我在JavaEye的数据库服务器上面简单测试了一把,没有做任何优化的工作,用ab测试,并发1000个请求很轻松,一点问题都没有。
系统配置:
CPU: AMD Opteron 2GHz × 2
内存: 4G RAM (其中MySQL使用了2G)
OS: SuSE Linux Enterprise Server SP3 x86_64 bit, Kernel 2.6.5
JDK: Sun HotSpot 1.5.0-10 x86_64 bit
Tomcat: 5.5.12 (APR)
Tomcat配置:
server.xml
- <Connector port="8080" maxHttpHeaderSize="8192" useBodyEncodingForURI="true"
- maxThreads="1000" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" redirectPort="8443" acceptCount="100"
- compression="on" compressionMinSize="2048"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
catalina.sh这个文件啥都没有改,懒得指定JVM参数进行优化了。
测试文件就用你贴出来的那个,用ab并发1000个请求,发送10000个请求,轻轻松松跑完测试,没有一个request fail。
我特别需要声明的是,这台服务器的CPU是很古老的型号了,而且上面还跑着异常繁忙的JavaEye后台数据库。因此在这台服务器上面做测试,性 能数据受到影响是可以预见的。而且我没有对JVM参数做任何优化,也没有对Tomcat进行任何特别的优化。即便如此,轻松的支撑1000个并发,这还是 直接用ab去压tomcat,没有走lighttpd。我另外也测试了一下走lighttpd,速度稍微慢一点,但是1000并发也毫无问题。
Tomcat启动信息:
- May 6, 2008 10:16:15 PM org.apache.coyote.http11.Http11AprProtocol init
- INFO: Initializing Coyote HTTP/1.1 on http-8080
- May 6, 2008 10:16:16 PM org.apache.catalina.startup.Catalina load
- INFO: Initialization processed in 1375 ms
- May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardService start
- INFO: Starting service Catalina
- May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardEngine start
- INFO: Starting Servlet Engine: Apache Tomcat/5.5.12
- May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardHost start
- INFO: XML validation disabled
- May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardHost start
- INFO: XML validation disabled
- May 6, 2008 10:16:22 PM org.apache.coyote.http11.Http11AprProtocol start
- INFO: Starting Coyote HTTP/1.1 on http-8080
- May 6, 2008 10:16:22 PM org.apache.catalina.storeconfig.StoreLoader load
- INFO: Find registry server-registry.xml at classpath resource
- May 6, 2008 10:16:22 PM org.apache.catalina.startup.Catalina start
- INFO: Server startup in 6944 ms
May 6, 2008 10:16:15 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
May 6, 2008 10:16:16 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1375 ms
May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.12
May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
May 6, 2008 10:16:16 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
May 6, 2008 10:16:22 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
May 6, 2008 10:16:22 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
May 6, 2008 10:16:22 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 6944 ms
- apache/bin/ab -c 1000 -n 10000 http://cvs.javaeye.com:8080/test.jsp
- This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Copyright 2006 The Apache Software Foundation, http://www.apache.org/
- Benchmarking cvs.javaeye.com (be patient)
- Completed 1000 requests
- Completed 2000 requests
- Completed 3000 requests
- Completed 4000 requests
- Completed 5000 requests
- Completed 6000 requests
- Completed 7000 requests
- Completed 8000 requests
- Completed 9000 requests
- Finished 10000 requests
- Server Software: Apache-Coyote/1.1
- Server Hostname: cvs.javaeye.com
- Server Port: 8080
- Document Path: /test.jsp
- Document Length: 79 bytes
- Concurrency Level: 1000
- Time taken for tests: 15.329142 seconds
- Complete requests: 10000
- Failed requests: 0
- Write errors: 0
- Total transferred: 3100000 bytes
- HTML transferred: 790000 bytes
- Requests per second: 652.35 [#/sec] (mean)
- Time per request: 1532.914 [ms] (mean)
- Time per request: 1.533 [ms] (mean, across all concurrent requests)
- Transfer rate: 197.47 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 343 1293.1 1 9046
- Processing: 1 514 1416.6 83 7206
- Waiting: 0 509 1416.8 79 7206
- Total: 1 857 2012.5 89 9608
- Percentage of the requests served within a certain time (ms)
- 50% 89
- 66% 147
- 75% 212
- 80% 326
- 90% 3124
- 95% 6078
- 98% 8935
- 99% 9049
- 100% 9608 (longest request)
你用apache可以支撑到900+不意味着apache可以帮你提升tomcat的并发能力,而是因为 apache默认情况下最大只支持256 个并发,你超过256个并发以后,在apache这一端都要排队,无形之中降低了你tomcat的并发负载的压力。特别是看你的测试数据,使用 apache以后,Requests per second从597ms一下上升到2.7秒就是明证,请求都被阻塞在apache那里排队去了。
我还没有升级到最新版本的JDK和最新版本的Tomcat,否则我估计我的测试性能还应该有更好的提升。另外我这硬件条件远不如你的测试硬件环 境。所以你的测试环境没有道理不应该支持1000个并发,而且应该是异常轻松。其实从你250个并发的测试来看,虽然request fail了一些,但是Requests per second并不高,这不是一个正常的现象。我觉得可能是你的Tomcat配置有问题,或者是Windows操作系统的线程调度性能不佳导致的。
楼主用的cpu 貌似32位的,操作系统 是windows
robbin用的cpu 貌似64位的,操作系统 是linux.
java在linux及64位下可以发挥的非常好。
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>