浅谈Apache性能调优

作了不少WEB系统性能测试,都知道了解测试环境,服务器硬件配置,web服务器参数配置是咱们开始测试前首先要作的事情。html

针对并发数量来讲,不一样数量级的用户并发,需求的服务器和web服务参数确定是不一样的。linux

对于不少像咱们这些作性能测试的人员,测试结果的正确性常常会被怀疑,甚至有时候也会被本身怀疑。web

是什么缘由致使呢?sql

我以为,是由于咱们对Web系统不够熟悉,对Apache不够熟悉,或者你熟悉但都是理论上的,因此不够自信。数据库

所以,常常看到测试人在测试过程当中,认为并发用户数量跑完就看有没有报错,是否所有都成功,而后把结果存下来,发给开发认为就完事了。apache

可是每每你把开发人员的知识面评估太高,由于他们可能看到你的报告更是一头雾水,对于报告中的结果更是无从下手。tomcat

————服务器

那么想一想作性能测试的目的是什么?网络

在固定环境下找出系统并发处理数据的能力,持续处理数据能力,找到系统性能存在瓶颈的地方,给予优化,使应用平台可以最大化提升数据处理能力,以知足大量用户并发请求的能力。并发

当咱们了解了测试环境,就能够对apache服务启动参数进行必定优化。

根据须要并发用户数量、请求接收数据量、以及当前被测试服务器硬件配置的状况,给予分配Apache所须要的内存和链接数等。

1.         编辑tomcat安装目录下的conf目录下的server.xml文件

tomcat配置文件server.xml中的<Connector />配置中,和链接数相关的参数有:

maxThreads="150"     表示最多同时处理150个链接,Tomcat使用线程来处理接收的每一个请求。这个值表示Tomcat可建立的最大的线程数。默认值200  

minSpareThreads="25"     表示即便没有人使用也开这么多空线程等待 

maxSpareThreads="75"     表示若是最多能够空75个线程,例如某时刻有80人访问,以后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。

(一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程。默认值50

acceptCount="100"   当同时链接的人数达到maxThreads时,还能够接收排队的链接数量,超过这个链接的则直接返回拒绝链接。(指定当任何可以使用的处理请求的线程数都被使用时,可以放处处理队列中的请求数,超过这个数的请求将不予处理。默认值10

其中和最大链接数相关的参数为maxThreadsacceptCount。若是要加大并发链接数,应同时加大这两个参数。

web server容许的最大链接数还受制于操做系统的内核参数设置,一般Windows2000个左右,Linux1000个左右。tomcat5中的配置示例:

  
  
  
  
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" acceptCount="100"/>

2.         修改启动时内存参数

window下, catalina.bat最前面:

 

  
  
  
  
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms1024m -Xmx1024m;-Duser.timezone=GMT+08;

linux下,在catalina.sh最前面增长,下面是我服务器配置(测试1500人并发可用):

 

  
  
  
  
export JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m -Xss256k -Duser.timezone=Asia/Shanghai"export JAVA_OPTS="$JAVA_OPTS -XX:PermSize=256m -XX:MaxPermSize=256m"export JAVA_OPTS="$JAVA_OPTS -XX:NewSize=64m -XX:MaxNewSize=64m"export JAVA_OPTS="$JAVA_OPTS -Dhttp.keepAlive=false"export JAVA_OPTS="$JAVA_OPTS -Dnetworkaddress.cache.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

JVM中最大堆大小有三方面限制:相关操做系统的数据模型(32-bt仍是64-bit)限制;系统的可用虚拟内存限制;

系统的可用物理内存限制。32位系统下,通常限制在1.5G~2G64为操做系统对内存无限制。

 

-Xms此值能够设置与-Xmx相同,以免每次垃圾回收完成后JVM从新分配内存。

(参数详解能够访问:http://unixboy.iteye.com/blog/174173

 

3.         线程池配置

使用线程池,用较少的线程处理较多的访问,能够提升tomcat处理请求的能力。

使用方式:首先打开/conf/server.xml,增长

  
  
  
  
  1. maxThreads="1000" minSpareThreads="50" maxIdleTime="60000" />
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

最大线程500(通常服务器足以),最小空闲线程数20,线程最大空闲时间60秒。

而后,修改<Connector ...>节点,增长executor属性,如:

  
  
  
  
<Connector executor="tomcatThreadPool" port="80"protocol="HTTP/1.1"maxThreads="600"minSpareThreads="100"maxSpareThreads="300" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" ....../>

maxThreads:Tomcat可建立的最大的线程数,每个线程处理一个请求;

minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数;

maxSpareThreads:最大备用线程数,一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程;

acceptCount:指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝链接。

connnectionTimeout:网络链接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。一般可设置为30000毫秒。

enableLookups:是否容许DNS查询

 

注意:能够多个connector公用1个线程池。

 

4.         调整链接相关Connector的参数:

  
  
  
  
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" keepAliveTimeout="20000" maxKeepAliveRequests="1" redirectPort="443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="1000" disableUploadTimeout="true"/>

(参数详解能够访问:http://blog.chinaunix.net/uid-12115233-id-3358004.html

尾话:

说上面这些内容,除了介绍Apache服务性能参数调优内容外,主要是想说,性能测试人员在作性能测试的时候,应先根据本身经验对环境参数进行检查调整后,再进行作测试。(另除了对Apache参数须要配置外,OracleMysql等大数据量数据库链接也都须要)

查找系统性能问题所在缘由,应先从硬件自己和服务配置先进行,排除了这两个问题最后再从代码找问题,这样提升处理问题效率,开发人员也不会去质疑你的结果。