物理環境php
VPC,64C,8G,SSDhtml
安裝環境web
centos7apache
apache2.4centos
php5.4bash
均使用YUM安裝。socket
默認配置。ide
建立phpinfo性能
echo "<?php phpinfo(); ?>" >> /var/www/html/index.php
使用ab,phpinfo進行測試
測試
出現socket錯誤繼續進行(-r Don't exit on socket receive errors.)
使用HTTP KeepAlive功能(-k ,避免apr_pollset_poll: The timeout specified has expired (70007)錯誤)
使用ulimit -n增長文件打開數量
ulimit -n 65535
第一次測試
ab -r -n 20000 -c 100 'http://127.0.0.1/index.php'
測試期間,新建一個會話,統計httpd進程數。
ps -ef|grep httpd|wc -l 259
最多的時候是259個進程,基本符合默認配置最多256個httpd進程
查看apache2.4 mpm默認配置
cat /etc/httpd/conf.modules.d/00-mpm.conf
# Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # #LoadModule mpm_event_module modules/mod_mpm_event.so
apache2.4 默認使用prefork模式,默認設置這裏沒有顯示,需在官網查詢
打開查詢網址
http://httpd.apache.org/docs/2.4/mod/prefork.html
發現prefork模式有如下配置
StartServers(啓動時進程數,默認5) MinSpareServers(最小空閒進程數,默認5) MaxSpareServers(最大空閒進程數,默認10) MaxRequestWorkers(最大進程數,不可大於serverlimit,默認256) MaxConnectionsPerChild(每一個進程處理任務數,達到後重啓進程,默認0,不重啓) ServerLimit(程序最大進程數,默認256) ListenBacklog(超過MaxRequestWorkers最大服務請求,將鏈接進行排隊,默認隊列長度511)
參數調整邏輯,將如下參數
StartServers MinSpareServers MaxSpareServers MaxRequestWorkers ServerLimit
設置成同一數值,避免httpd進程數出現變化,形成性能不穩定。
不重啓進程,節約cpu。生產環境需設置一個較大數值,避免內存泄漏。
MaxConnectionsPerChild 0
將隊列調高,未來不及處理的連接都進行排隊
ListenBacklog 10000
ab測試的時候加上-r -k參數,避免出現小錯誤時候中止測試.
-n 表明總測試次數,-c 表明每秒測試次數
ab -k -r -n 1000000 -c 512 'http://127.0.0.1/index.php'
新建會話使用top(這裏推薦htop)觀察內存,cpu佔用狀況,如出現cpu或內存超過80%負荷(在保證最高負荷時的穩定性,通常不推薦超過80%負荷,這是我的經驗,無測試依據)狀況,同步下降全部參數。
其實通常狀況下默認的參數就夠用的,若是你的設備性能很是好,才須要慢慢調整配置。
測試一次,調整一次,避免負優化。