一、關於apache
1、首先,在頁面訪問變慢情況發生時,使用 top 命令查看了服務器的負載情況,發現負載並不高,初步估計不是程序的問題。
2、然後,查看了線程中的 httpd 的數量, ps -aux | grep httpd | wc -l 發現,線程數已經達到了 apache 設置的最大值。由此斷定是網站訪問人數過多造成了訪問過慢。
3、爲了驗證,查看了連接數和當前的連接數,分別是
netstat -ant | grep $ip:80 | wc -l
netstat -ant | grep $ip:80 | grep EST | wc -l
發現果然,連接數特別多,遠遠超過我們的估計值。
開始修改:
apache配置文件:httpd.conf
默認配置如下:
<IfModule mpm_prefork_module>
StartServers 5 起始進程數
MinSpareServers 5 最小空閒進程數(等待)
MaxSpareServers 10 最大等待進程數
ServerLimit 256 允許最大連接數上線
MaxClients 150 可同時處理的最大請求數
MaxRequestsPerChild 0 每個子進程能夠處理的最大請求數,0爲無限
</IfModule>
更改配置如下:
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
</IfModule>
此更改後,web服務器性能會大大提高,LR測試時,就不會老出現server has shutdown the connecttions或者connect timeout之類的錯誤了,剩下的就是程序代碼優化的問題了
二、關於mysql
另外,數據庫比如mysql之類的,還有一個max_connections之類的配置,一般需要打開,使得不會因爲數據庫的限制導致連接數上不來
MYSQL數據庫安裝完成後,默認最大連接數是100,一般流量稍微大一點的論壇或網站這個連接數是遠遠不夠的,增加默認MYSQL連接數的方法有兩個
方法一:進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改爲 max_connections=1000 服務裏重起MYSQL即可
方法二:MySQL的最大連接數默認是100客戶端登錄:mysql -uusername -ppassword
設置新的最大連接數爲200:mysql> set GLOBAL max_connections=200
顯示當前運行的Query:mysql> show processlist
顯示當前狀態:mysql> show status
退出客戶端:mysql> exit
查看當前最大連接數:mysqladmin -uusername -ppassword variables
ps:增加mysql的連接數對系統消耗其實影響不大