测试并发与优化性能的一些心得
最近在做之前提到的服务的并发测试,有一些心得和优化处理。
当N个并发请求服务器时,先由服务器的线程池来处理请求(同java普通的线程池)也是当核心线程数用完以后后来的请求会进入队列中。所以当并发量到一定程度的时候必须使用负载均衡(就分摊一下请求就可以)分摊一下并发压力,不然就算硬件在好效率也不一定上的去。
负载均衡我就不说了,不是我配置的,也不归我管没办法提供真实参数了。
有几种情况导致数据丢失:
1.内存不足:导致服务器无法创建新的线程处理请求(请求的数据量大内存自然紧张),该线程所涉及的请求则没有处理(负载均衡+定制化处理服务,如:超过30M数据量就调用其他服务处理)。
2.超过最大线程与队列,服务器会拒绝请求(负载均衡)。
3.服务器宕机,断网,等等外部因素(写一个查询补偿服务,如:定时查询数据库是否存在该数据不存在由查询服务再次请求一次)。
4.超过数据库最大访问量,或访问数据库超时等数据库问题(根据需求设置访问量控制)。
5.请求等待超时(等待时间长一些)。
1.服务器线程池:
处理方式:配置服务器线程池评估并发量通过负载均衡区把并发稀释到N个服务器。
只写一下本地tomcat的(服务器是weblogic的内存配的2048,weblogic调优推荐一篇博客:http://blog.csdn.net/rznice/article/details/7283494):
1.set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m;-Duser.timezone=GMT+08;
一定加在catalina.bat最前面。
2.Tomcat配置:server。Xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11Protocol"
connectionTimeout="600000" keepAliveTimeout="150000"
redirectPort="8443" URIEncoding="UTF-8"
useBodyEncodingForURI="true" maxPostSize="0"
minSpareThreads="100" maxSpareThreads="300" acceptCount="10000" />
protocol="org.apache.coyote.http11.Http11Protocol" 写这个别写HTTP1.1否则有误。
参数解释:(摘抄自百度)
maxThreads:Tomcat可创建的最大的线程数,每一个线程处理一个请求;
minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数;
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。
connnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
enableLookups:是否允许DNS查询
注意:可以多个connector公用1个线程池。
l connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
l keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
l 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 kee