淺談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等大數據量數據庫鏈接也都須要)

查找系統性能問題所在緣由,應先從硬件自己和服務配置先進行,排除了這兩個問題最後再從代碼找問題,這樣提升處理問題效率,開發人員也不會去質疑你的結果。



相關文章
相關標籤/搜索