APACHE最佳化之apache的記憶體使用

日期:2008-07-02  作者:喜騰小二  來源:PHPChina


Apache是執行在Linux操作係統上的頭號Web伺服器。很多小地方都可以用來調整Apache的效能,並降低它對係統資源的影響。其中一個就是調整記憶體使用率,當然達到這一目的可能還是需要花點功夫的。
例如,透過ps來確定httpd執行緒的記憶體使用率,可以輸入下麵的指令:
# ps -U apache -u apache u

USERPID %CPU %MEMVSZRSS TTYSTAT START TIME COMMAND
apache130670.05.3 149704 54504 ?SOct071:53 /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -DAPACHE2
...

上麵這段輸出顯示了單個httpd處理序使用了50 MB的RSS(駐留集大小)記憶體(或者非交換實體記憶體),以及149 MB的VSZ(虛擬)記憶體。這當然在很大程度上取決於妳在Apache裡載入和執行的模組數量。這決不是一個固定的數字。由於這個數字裡還包含了共用庫包,所以不是100%的準確。我們可以認為RSS數字的一半是httpd執行緒真正使用的記憶體數,這可能還有點保守,但是離我們的目的已經非常接近了。

在本文裡,我們假設每個httpd處理序都在使用了27 MB記憶體。然後,妳需要確定可以讓httpd真正使用的記憶體數。根據執行在機器上的其他處理序,妳可能希望要求50%的實體記憶體都供Apache使用。在一個裝有1GB記憶體的係統上,就有512MB的記憶體可以被劃分為多個27MB的記憶體,也就是大約19個併發的httpd記憶體。有些人堅持認為每個httpd 執行緒“真正”使用大約5MB的記憶體,所以從理論上講妳可以把512MB的記憶體劃分出102個併發處理序供Apache使用(要記住的是,除非妳的網站需要極其巨大的流量,否則這種情況是非常罕見的)。  
在預設狀態下,Apache會分配最大256個併發用戶端連線,或者256個處理序(每一個都對應一個請求)。按照這種設定,一個流量巨大的網站會在頃刻間崩潰(即使妳假設每個處理序占用5MB記憶體,那也需要1.3GB的記憶體來滿足請求的數量)。如果不采取其它措施,係統會透過硬碟來嘗試使用交換空間以處理它無法在實體記憶體中完成的工作。

其他可以調整的項目包括KeepAlive、KeepAliveTimeout和MaxKeepAliveRequests等設定。可以放在httpd.conf檔案裡的推薦設定有:

ServerLimit 128MaxClients 128KeepAlive OnKeepAliveTimeout 2MaxKeepAliveRequests 100

透過將KeepAliveTimeout從15秒減到2秒,可以增加MaxClients指令;19太小,而128要好得多。透過減少處理序存活的秒數,妳可以在相同的時間內允許更多的連線。

當然,如果沒有真正的測試在背後支援,數字就是毫無意義的,這就是ab的作用之所在。使用ab對Apache配置檔案(MaxClients 等於 256、ServerLimit等於256、KeepAliveTimeout等於15)進行調整,使其能夠滿足1000個請求(100個連續請求併發產生)的調整方法如下。(在執行測試的時候要確保伺服器上有一個終端開啟以觀察係統的負載。)
$ ab -n 1000 -c 100 -k http://yoursite.com/index.php

現在把上麵的伺服器設定改為更加保守的設定,重新啓動Apache,試着再次測試(總是從遠端電腦上進行,而不是本機)。
在這裡的測試中,不同的設定導緻執行所消耗的時間產生了一倍的差距(分別為27.8s和16.8s),但是負載的平均值為0.03和 0.30。這可能會使得妳的網站變得稍慢,但是會確保它不會在高負載的情況下崩潰。還要記住的是,妳將需要進行多次測試,以便取得一個平均值。

使用ab是測試調整Apache配置的一個極佳方法,應該在妳每次做出影響效能的變更時使用它

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计