淺談linux性能調優之十:資源分配規劃

        咱們都瞭解apache的兩種工做模式,這節咱們以prefork模式來考慮apache應用的配置!首先說說apache的prefork工做模式:
prefork:特色穩定,對動態頁面支持好!
        prefork的工做原理是,控制進程在最初創建"StartServers"個子進程後,爲了知足"MinSpareServers"設置的須要建立一 個進程,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個……如此按指數級增長建立的進程數,最多達到每秒32個,直到知足 MinSpareServers設置的值爲止。這就是預派生(prefork)的由來。這種模式能夠沒必要在請求到來時再產生新的進程,從而減少了系統開銷 以增長性能。
        MaxSpareServers設置了最大的空閒進程數,若是空閒進程數大於這個值,apache會自動kill掉一些多餘進程。這個值不要設得過大,但 若是設的值比MinSpareServers小,apache會自動把其調整爲MinSpareServers+ 1。若是站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。
        MaxRequestsPerChild設置的是每一個子進程可處理的請求數。每一個子進程在處理了"MaxRequestsPerChild" 個請求後將自動銷燬。0意味着無限,即子進程永不銷燬。雖然缺省設爲0可使每一個子進程處理更多的請求,但若是設成非零值也有兩點重要的好處:
a.可防止意外的內存泄漏;
b.在服務器負載降低的時侯會自動減小子進程數。
        所以,可根據服務器的負載來調整這個值。但也不能過小,否則系統不斷的開啓新的apache進程,形成資源浪費。
MaxClients 是這些指令中最爲重要的一個,設定的是apache能夠同時處理的請求,是對apache性能影響最大的參數。其缺省值 150是遠遠不夠的,若是請求總數已達到這個值(可經過ps -ef|grep http|wc -l來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下不少而http訪問卻很慢的主要緣由。系統管理員能夠根據硬件配置 和負載狀況來動態調整這個值。雖然理論上這個值越大,能夠處理的請求就越多,但apache默認的限制不能大於256。若是把這個值設爲大於256,那麼 apache將沒法起動。事實上,256對於負載稍重的站點也是不夠的。

###################################################################
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256    一個服務器的毫不至於此!
MaxRequestsPerChild  4000
</IfModule>
###################################################################

    看看下面的數據,我使用ab作壓力測試:ab -c 500 -t 60 http://127.0.0.1/index.html
    看看一個apache進程佔多少內存:
淺談linux性能調優之十:資源分配規劃 - 了了 - OscerSong的博客
 

看看top的man文檔:注意這幾列
        o: VIRT  --  Virtual Image (kb)
          The  total  amount  of  virtual  memory used by the task.  It includes all
          code, data and shared libraries plus pages that  have  been  swapped  out.
          (Note:  you  can  define  the STATSIZE=1 environment variable and the VIRT
          will be calculated from the /proc/#/state VmSize field.)

          VIRT = SWAP + RES.

       p: SWAP  --  Swapped size (kb)
          The swapped out portion of a task’s total virtual memory image.

       q: RES  --  Resident size (kb)
          The non-swapped physical memory a task has used.

    我的認爲:swap可手動添加,而物理內存是主要的限制,能夠看出一個httpd佔3.3M, MaxClients數量即可以這樣計算:
    MaxClients = ( 物理內存*0.8 - 乾淨開機已使用內存 )/ 3.3M (注意要配置ServerLimit,MaxClients要小於ServerLimit)

    oracle就是一個吃內存的數據庫,開啓是便分配上G內存給SGA,內部幾個重要內存區可手動調整,在規劃時,必定要注意系統的安全性與內存的使用率,(不瞭解的能夠看看oracle的體系結構)
相關文章
相關標籤/搜索