設定與測試Apache+PHP的效能

檢查FreeBSD機器CPU核心數

#cat /var/run/dmesg.boot | grep SMP


檢查443埠連線數

#netstat -nat|grep -i "443"|wc -l


目前連線數

#ps aux | grep httpd | wc -l


檢查httpd的記憶體(RSS)使用總量

#ps aux | grep httpd | awk '{sum += $6;n++};END{print sum}'


檢查httpd的記憶體(RSS)平均使用量

#ps aux | grep httpd | awk '{sum += $6;n++};END{print sum/n}'


1.編輯/usr/local/etc/apache24/extra/httpd-mpm.conf

# ee /usr/local/etc/apache24/extra/httpd-mpm.conf

(1)ServerLimit:表示子行程(child process)個數的上限。最耗大於等於 MaxRequestWorkers,預設值是 16。

(2)StartServers:啟動時,初始化子行程的個數。

(3)MaxRequestWorkers:表示全部子行程可以處理的執行緒總量,可以設定為 ServerLimit * ThreadsPerChild,如果超過此數量,則使用者的要求(request)將放置於佇列中,等待空的執行緒才能執行。

(4)MinSpareThreads:閒置執行緒數量的最小值,當閒置執行緒數量小於此值時,apache會自動增加執行緒。

(5)MaxSpareThreads:閒置執行緒數量的最大值,當閒置執行緒數量大於此值時,apache會自動刪除執行緒,需大於等於MinSpareThreads與ThreadsPerChild的和。

(6)ThreadsPerChild:每個子行程能建立的執行緒數量。其值需小於等於ThreadLimit。

(7)ThreadLimit:執行緒上限,預設是 1920,但不可超過 20000。

(8)MaxConnectionsPerChild:每個子行程在生命週期內建立連線的上限值,預設值為0,表示沒有上限。


設定規則

(1)MinSpareThreads與MaxSpareThreads最好是ThreadsPerChild 的整數倍

(2)MaxRequestWorkers等於 ServerLimit * ThreadsPerChild

(3)假設記憶體8G,系統保留2G,假設一個行程跑50個執行緒總共需要100M,則6G/100M=60,則最多可以跑60個行程,則ServerLimit最多設定為60,這裡設定為32。


/usr/local/etc/apache24/extra/httpd-mpm.conf

<IfModule mpm_event_module>

ServerLimit 32

StartServers 3

MinSpareThreads 100

MaxSpareThreads 250

ThreadsPerChild 50

MaxRequestWorkers 1600

MaxConnectionsPerChild 0

</IfModule>


2.啟用httpd-mpm.conf,編輯httpd.conf去除Include etc/apache24/extra/httpd-mpm.conf前方的#,重新啟動Apache

Include etc/apache24/extra/httpd-mpm.conf

#apachectl restart


執行1000請求,並執行10次

#ab -k -n 1000 -c 10 "http://127.0.0.1/index.php"