天天看點

apache_work

1、prefork.c子產品(一個非線程型的、預派生的MPM)

    prefork MPM 使用多個子程序,每個子程序隻有一個線程。每個程序在某個确定的時間隻能維持一個連接配接。在大多數平台上,Prefork MPM在效率上要比Worker MPM要高,但是記憶體使用大得多。prefork的無線程設計在某些情況下将比worker更有優勢:他能夠使用那些沒有處理好線程安全的第三方子產品,并 且對于那些線程調試困難的平台而言,他也更容易調試一些。

ServerLimit   20000

StartServers   5           //指定伺服器啟動時建立的子程序數量,prefork預設為5

MinSpareServers   5     //指定空閑子程序的最小數量,預設為5。假如目前空閑子程序數少于                                                    MinSpareServers ,那麼Apache将以最大每秒一個的速度産生新的子程序。

MaxSpareServers   10    //配置空閑子程序的最大數量,預設為10。假如目前有超過MaxSpareServers數量                               的空閑子程序,那麼父程序将殺死多餘的子程序。

MaxClients   1000      //預設的MaxClient最大是256個線程,假如想配置更大的值,就的加上ServerLimit這個                                參數。20000是ServerLi  mit這個參數的最大值。假如需要更大,則必須編譯apache,此                             前都是無需重新編譯.生效前提:必須放在其他指令的前面

MaxRequestsPerChild 0    //每個子程序在其生存期内允許伺服的最大請求數量,預設為10000.到達                                             MaxRequestsPerChild的限制後,子程序将會結束。假如MaxRequestsPerChild                                        為"0",子程序将永遠不會結束。

将MaxRequestsPerChild配置成非零值有兩個好處:

        1.能夠防止(偶然的)記憶體洩漏無限進行,進而耗盡記憶體。 

        2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。

ServerLimit     2000

工作方式:

一個單獨的控制程序(父程序)負責産生子程序,這些子程序用于監聽請求并作出應答。Apache總是試圖保持一些備用的 (spare)或是空閑的子程序 用于迎接即将到來的請求。這樣用戶端就無需在得到服務前等候子程序的産生。在Unix系統中,父程序通常以root身份運作以便邦定80端口,而 Apache産生的子程序通常以一個低特權的使用者運作。User和Group指令用于配置子程序的低特權使用者。運作子程序的使用者必須要對他所服務的内容有 讀取的權限,但是對服務内容之外的其他資源必須擁有盡可能少的權限。

2、worker.c子產品(支援混合的多線程多程序的多路處理子產品)

    worker MPM 使用多個子程序,每個子程序有多個線程。每個線程在某個确定的時間隻能維持一個連接配接。通常來說,在一個高流量的HTTP伺服器上,Worker MPM是個比較好的選擇,因為Worker MPM的記憶體使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一個線程崩潰,整個程序就會連同其任何線程一起"死掉".由于線程共享記憶體空間,是以一個程式在運作時必須被系統識别為"每 個線程都是安全的"。

ServerLimit 16      //伺服器允許配置的程序數上限。這個指令和ThreadLimit結合使用配置了MaxClients最大允                   許配置的數值。任何在重新開機期間對這個指令的改變都将被忽略,但對MaxClients的修改卻會生效。

ThreadLimit 64     //每個子程序可配置的線程數上限。這個指令配置了每個子程序可配置的線程數                                         ThreadsPerChild上限。任何在重新開機期間對這個指令的改變都将被忽略,但對                                            ThreadsPerChild的修改卻會生效。預設值是"64".

StartServers 3           //伺服器啟動時建立的子程序數,預設值是"3"。

MinSpareThreads 75      //最小空閑線程數,預設值是"75"。這個MPM将基于整個伺服器監控空閑線程數。假如                                 伺服器中總的空閑線程數太少,子程序将産生新的空閑線程。

MaxSpareThreads 250     //配置最大空閑線程數。預設值是"250"。這個MPM将基于整個伺服器監控空閑線程                                       數。假如服 務器中總的空閑線程數太多,子程序将殺死多餘的空閑線 程。                                                 MaxSpareThreads的取值範圍是有限制的。Apache将按照如下限制自動修正您                                   配置的值:worker需要其大于等于 MinSpareThreads加上ThreadsPerChild的和

MaxClients 400       //允許同時伺服的最大接入請求數量(最大線程數量)。任何超過MaxClients限制的請求都将                                 進入等候 隊列。預設值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的結                                    果。是以要增加MaxClients的時候,您必須同時增加 ServerLimit的值。

ThreadsPerChild 25       //每個子程序建立的常駐的執行線程數。預設值是25。子程序在啟動時建立這些線程後                              就不再建立新的線程了。

MaxRequestsPerChild 0       //配置每個子程序在其生存期内允許伺服的最大請求數量。到達                                                                           MaxRequestsPerChild的限制後,子程序将會結束。假如                                               MaxRequestsPerChild為"0",子程序将永遠不會結束。

          1.能夠防止(偶然的)記憶體洩漏無限進行,進而耗盡記憶體。 

           2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。 

注意

對于KeepAlive連結,隻有第一個請求會被計數。事實上,他改變了每個子程序限制最大連結數量的行為。

每個程序能夠擁有的線程數量是固定的。伺服器會根據負載情況增加或減少程序數量。一個單獨的控制程序(父程序)負責子程序的建 立。每個子程序能夠建立 ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求并将其傳遞給服務線程處理和應答。Apache總是試圖維持一個備 用(spare)或是空閑的服務線程池。這樣,用戶端無須等待新線程或新程序的建立即可得到處理。在Unix中,為了能夠綁定80端口,父程序一般都是以 root身份啟動,随後,Apache以較低權限的使用者建立子程序和線程。User和Group指令用于配置Apache子程序的權限。雖然子程序必須對 其提供的内容擁有讀權限,但應該盡可能給予他較少的特權。另外,除非使用了suexec ,否則,這些指令配置的權限将被CGI腳本所繼承。

工作模式切換:

# cd /usr/sbin/

# mv httpd httpd.prefork    //将目前的prefork模式啟動檔案改名