用的JMeter在自己电脑上测试的。Ubuntu10.04(x64)内存2G,cpu E5400 主频2.7.jdk1.6.0_27(x64) , tomcat6.0.33(x64) , oracle 10g测试一个条件分页查询,数据库响应时间在0.5秒左右。之前测试第秒100个并发查询,持续1小时,响应时间先是保持在9秒左右,到后来越来越长。以这个配置测试时,200个并发,响应先是在4秒左右,之后越来越快,在1到2秒的时间内可以响应果。我的那项目并发最多也就100个,所以之后的就没有测试了,达标了就ok了。至于cpu和内存的消耗则没有记录下来,但是我的电脑还可以接受。客户那边是两个4核,64G内存,所以我也不用处理这个问题了。
java 环境配置:
export JAVA_OPTS="-server -Xms8g -Xmx8g -Xss128k -XX:ParallelGCThreads=20
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8
-XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31"
sysctl.conf 的配置:
net.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_tw_buckets = 180000net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_rmem = 4096 87380 4194304net.ipv4.tcp_wmem = 4096 16384 4194304net.ipv4.tcp_max_syn_backlog = 65536net.core.netdev_max_backlog = 32768net.core.somaxconn = 327680net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_tw_recycle = 1#net.ipv4.tcp_tw_len = 1net.ipv4.ip_local_port_range = 1024 650000net.ipv4.tcp_keepalive_time = 5net.ipv4.tcp_keepalive_probes=2net.ipv4.tcp_keepalive_intvl=2net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recyle = 1net.ipv4.tcp_max_syn_backlog=8192net.ipv4.tcp_no_metrics_save = 0net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_max_orphans = 3276800fs.file-max = 9553600net.ipv4.netfilter.ip_conntrack_max = 655360net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 60net.ipv4.tcp_max_tw_buckets = 60000net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2
tomcat 的SERVER.XML 配置:server.conf 配置
<Connector port="8188" protocol="HTTP/1.1"maxThreads="30000"minSpareThreads="512"maxSpareThreads="2048"enableLookups="false"redirectPort="8443" acceptCount="35000"debug="0"connectionTimeout="40000"disableUploadTimeout="true"URIEncoding="UTF-8" /> 参数说明:connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)maxHttpHeaderSize - http 请求头信息的最大程度,超过此长度的部分不予处理。一般8K。URIEncoding - 指定Tomcat 容器的URL 编码格式。acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。disableUploadTimeout - 上传时是否使用超时机制
enableLookups - 是否反查域名,取值为:true 或false。为了提高处理能力,应设置为falsebufferSize - defines the size (in bytes) of the buffer to be provided for inputstreams created by this connector. By default, buffers of 2048 bytes are provided.maxSpareThreads - 最大空闲连接数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的socket 线程The default value is 50.maxThreads - 最多同时处理的连接数,Tomcat 使用线程来处理接收的每个请求。这个值表示Tomcat 可创建的最大的线程数。minSpareThreads - 最小空闲线程数,Tomcat 初始化时创建的线程数.minProcessors - 最小空闲连接线程数,用于提高系统处理性能,默认值为10。maxProcessors - 最大连接线程数,即:并发处理的最大请求数,默认值为75。
修改启动时内存参数
window 下, 在catalina.bat 最前面:set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m一定加在catalina.bat 最前面。linux 下,在catalina.sh 最前面增加:JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m-Duser.timezone=Asia/Shanghai"注意:前后二者区别,有无set,有无双引号。
<Connector port="8098" protocol="HTTP/1.1"
connectionTimeout="20000" maxHttpHeaderSize="8192" maxThreads="2000" minSpareThreads="500" acceptCount="2000" enableLookups="false" redirectPort="8443" />