我用一个简单的Servlet测试,这个Servlet中什么也没做,由于我用了Servlet3.0的异步特性,里面只是AsyncContext.complete();对于这个Servlet,在一台服务器上,用一个Tomcat实例,想并发到10000 req/sec,有没有做过的朋友来指点一下。目前,我通过配置默认的BIO的connector,最好的时候能到5880 req/sec,距离要求的 10k req/sec还很远。我看《Tomcat权威指南》上说BIO的性能还不错能到 2.3w req/sec呢。
解决方案 »
- 请教一个简单的问题
- 求Java面试如何描述自己做的项目?
- httpclient访问https出现异常
- 关于Spring中的Advisor配置,如何为pointcut配置多个pattern呢?
- 求助:java调用有返回对象的webservice迷惑!请好心人帮帮我,谢谢~
- 请各位大哥为小弟推荐一下学习Spring的好书!
- 请问log4j:WARN Error during default initialization是什么原因啊,bae java
- 请问J2EE的开发周期一般是多长,我现在只会Struts,JavaBean,Jsp,EJB 只有一些概念,,想开发EJB好学吗??
- 用javabean调用ejb的疑问
- 在线等:关于SMTP用户确认的小问题!
- 导出excel表问题
- 一个Servlet只能对应一个访问路径
估计你是2G内存,5880 req/sec已经很不错了
直接在服务器上测试的,应该没有带宽的限制了。
OS: Windows 2008 R2, 虚拟机: 16核,32G内存
JDK6_update30
Tomcat 7.0.27
acceptCount="1000"
disableUploadTimeout="true"
enableLookups="false"
keepAliveTimeout="20"
maxThreads="500"
minThreads="500"
maxProcessor="500"
minSpareThreads="20"
maxKeepAliveRequests="1"
connectionTimeout="20"
redirectPort="8443"
allowTrace="false"
acceptorThreadCount="100"
acceptorThreadPriority="7"
socket.tcpNoDelay="true"
threadPriority="8"
tcpNoDelay="true"
compression="on"
emptySessionPath="true"
/>这是我的connector配置
minSpareThreads 小了,建议设置500,服务器启动时就把线程都准备好。
maxSpareThreads 增加上,也是500好了。
acceptorThreadCount 大了点,按照CPU数量设置。
maxKeepAliveRequests 小了点,可以放大点,比如 50 ~ 100。
acceptCount 小了点,可以放大点,比如跟Thread一样大。
“《Tomcat权威指南》上说BIO的性能还不错能到 2.3w req/sec呢”
基本上都是做了不少优化后的效果了。
多谢 ldh911 !minSpareThreads maxSpareThreads 都调成跟maxThread一样,可以理解,启动时就把所有的线程准备好,并且不释放。acceptorThreadCount 跟CPU 的core数目一样,也可以理解,看书上写的意思像是这么多线程来从一个池子里取出线程。maxKeepAliveRequests 这个设置,我从书上看的说 设置为1,来应对高并发(我没有太理解这个参数)acceptCount 设置的1000,maxThreads设置的500,这个应该是大了。我试试看,回来通知你 ldh911 !Thanks again!
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.
我自己写的服务端,如何作为类似于 httpd 这样的服务发布呢?
新浪微博有多少工程师、多少服务器我不知道,不过我们网站正好用的apache+tomcat,流量很低,alexa排名才1万,有15台tomcat服务器。兄弟,如果你能一台服务器解决这个问题的话,我可以花高价聘请你来帮忙,不过前提是你不被google这样的公司挖走,因为我听说google有超过100万台服务器。