為了滿足網(wǎng)站高負(fù)荷的要求,在調(diào)整Apache參數(shù)時(shí)發(fā)現(xiàn)進(jìn)程經(jīng)常占用內(nèi)存過多導(dǎo)致當(dāng)機(jī)。經(jīng)過不斷的優(yōu)化和修改參數(shù)組合,終于讓服務(wù)器穩(wěn)定 下來,可以滿足大量訪問的考驗(yàn)和應(yīng)用要求。筆者總結(jié)了調(diào)試過程中的問題和解決辦法如下,以供有類似需求的網(wǎng)管員參考(系統(tǒng)環(huán)境為Windows Server 2003和apache2.2.8):
1、http-mpm.conf設(shè)置 Apache的線程數(shù)控制文件為http-mpm.conf,在conf/exrtra目錄下面,要使該配置文件起作用需要在httpd.conf 中將 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。 在Windows系統(tǒng)中,起作用的是Winnt mpm段, 復(fù)制代碼 代碼如下: <IfModule mpm_winnt_module> ThreadsPerChild 150 MaxRequestsPerChild 0 </IfModule> 以上是缺省的配置,一般情況下夠用了,但負(fù)荷較大的網(wǎng)站就需要修改了,否則訪問網(wǎng)站會(huì)變慢或沒有響應(yīng)。實(shí)際設(shè)置中可以根據(jù)apache-status查看apache實(shí)時(shí)連接狀態(tài),查看其中線程占用數(shù)目情況來進(jìn)行相應(yīng)的調(diào)整,我的服務(wù)器最后設(shè)置如下: 復(fù)制代碼 代碼如下: <IfModule mpm_winnt_module> ThreadsPerChild 350 ThreadLimit 350 MaxRequestsPerChild 10000 </IfModule> 其中ThreadLimit是占用系統(tǒng)線程數(shù)限制,修改后會(huì)在apache-status中直接看到效果,就是對(duì)應(yīng)的最大的可用線程數(shù)(如圖所示)。 MaxRequestsPerChild是進(jìn)程的最大的請(qǐng)求數(shù)目,既指網(wǎng)站收到請(qǐng)求的緩存數(shù)。設(shè)置太小了會(huì)影響服務(wù)器性能,因?yàn)闀?huì)占用較多cpu時(shí) 間,太大了則會(huì)占用內(nèi)存資源。一般大型的網(wǎng)站文件個(gè)數(shù)都是成千上萬,所以管理員應(yīng)該根據(jù)網(wǎng)站情況自己設(shè)定,只要不為0(無限制)就可以,以防止內(nèi)存溢出。 ThreadsPerChlid是Apache進(jìn)程的子線程數(shù),意思是服務(wù)器開了這么多的線程數(shù)來等待響應(yīng)客戶端請(qǐng)求。該參數(shù)需要根據(jù) apache-status實(shí)時(shí)的監(jiān)控情況來調(diào)節(jié),太大會(huì)導(dǎo)致內(nèi)存增長(zhǎng)過快,直到服務(wù)器當(dāng)機(jī),太小會(huì)導(dǎo)致服務(wù)器連接隊(duì)列在高峰期時(shí)占滿,從而導(dǎo)致網(wǎng)站連接 慢。同時(shí)我們應(yīng)該修改另一個(gè)配置文件httpd-default.php中的超時(shí)設(shè)置來配合這個(gè)參數(shù)。 2、httpd-default.conf設(shè)置 在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。我們需要調(diào)節(jié)以下參數(shù): Timeout 15 該參數(shù)為連接超時(shí),缺省的300秒顯然太大,縮小該參數(shù)就會(huì)減少同時(shí)連接數(shù),即用戶實(shí)際占用的線程數(shù),這樣就可以起到配合上面ThreadsPerChlid參數(shù)的作用。 KeepAlive On 該參數(shù)為是否保持活連接,目前網(wǎng)站中一個(gè)頁(yè)面一般會(huì)包含多個(gè)文件,所以相應(yīng)用戶訪問時(shí)會(huì)有多個(gè)請(qǐng)求,因此開啟可以提高服務(wù)器性能。 MaxKeepAliveRequests 50 該參數(shù)為最大的活連接請(qǐng)求數(shù),可以根據(jù)網(wǎng)頁(yè)實(shí)際包含的文件數(shù)目自行調(diào)節(jié)。 KeepAliveTimeout 5 該參數(shù)為活連接的超時(shí)時(shí)間,一般只要設(shè)置成小于Timeout即可。 這樣設(shè)置后,Apache在響應(yīng)請(qǐng)求和防止惡意攻擊方面就取得較為平衡的效果,當(dāng)然由于內(nèi)存回收機(jī)制和進(jìn)程管理不同,Windows下長(zhǎng)期運(yùn)行 Apache還是不如Unix穩(wěn)定,因此我們可以讓Apache在每天凌晨訪問人數(shù)少時(shí)自動(dòng)重啟一次,以回收資源。用Windows自帶的計(jì)劃任務(wù)就可以 簡(jiǎn)單的實(shí)現(xiàn)。這樣,我們就使Apache在Windows平臺(tái)下像Unix一樣長(zhǎng)期穩(wěn)定的提供服務(wù)了。 windows下apache及mysql定時(shí)自動(dòng)重啟&服務(wù)器定時(shí)自動(dòng)重啟新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注