Tomcat 并发10k
我用一个简单的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呢。
------解决方案--------------------
跟机器有关。
------解决方案--------------------
maxKeepAliveRequests 设置为1,即禁用keepAlive,某些场合下有道理。但真实环境下的HTTP1.1中,允许一次连接传送多个请求,这样可以有效减少浏览器与服务端的TCP握手次数。比如一个网页带20张图片,非keepAlive模式下,要连接20次服务器来获取20张图片;启用keepAlive则可以1次连接获取20张图片。
当然,客观地说,面对压力测试未必有意义。
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.
------解决方案--------------------我看《Tomcat权威指南》上说BIO的性能还不错能到 2.3w req/sec
每次看到这种并发XXX的问题总觉得令人蛋疼,不是说解决不了,而是毫无意义的问题。假设1秒钟并发1万,那1个小时的pv就是3600万,假设一天的pv只按照3个小时算就是1亿的pv。
一天1亿的pv多大?我刚刚查一下新浪微博的排名,平均一天的pv是1.8亿,也就是说你相当于做了半个新浪微博。
新浪微博有多少工程师、多少服务器我不知道,不过我们网站正好用的apache+tomcat,流量很低,alexa排名才1万,有15台tomcat服务器。
兄弟,如果你能一台服务器解决这个问题的话,我可以花高价聘请你来帮忙,不过前提是你不被google这样的公司挖走,因为我听说google有超过100万台服务器。
------解决方案--------------------你给tomcat分配的资源太少了。要加大。加到1024左右还差不多。