如何設定Apache中的最大連線數

2022-02-03 02:44:45 字數 3301 閱讀 7032

apache的主要工作模式有兩種:prefork和worker

一、兩種模式

prefork模式(預設模式)

prefork是unix平台上的預設(預設)mpm,使用多個子程序,每個子程序只有乙個執行緒。每個程序在某個確定的時間只能維持乙個連線,效率高,但記憶體佔用量比較大。

這個多路處理模組(mpm)實現了乙個非執行緒型的、預派生的web伺服器,它的工作方式類似於apache 1.3。它適合於沒有執行緒安全庫,需要避免執行緒相容性問題的系統。它是要求將每個請求相互獨立的情況下最好的mpm,這樣若乙個請求出現問題就不會影響到其他請求。

worker模式

worker使用多個子程序,每個子程序有多個執行緒,每個執行緒在某個確定的時間只能維持乙個連線,記憶體佔用量比較小,適合高流量的http伺服器。缺點是假如乙個執行緒崩潰,整個程序就會連同其任何執行緒一起」死掉」,所以要保證乙個程式在執行時必須被系統識別為」每個執行緒都是安全的」。

此多路處理模組(mpm)使網路伺服器支援混合的多執行緒多程序。由於使用執行緒來處理請求,所以可以處理海量請求,而系統資源的開銷小於基於程序的mpm。但是它也使用了多程序,每個程序又有多個執行緒,以獲得基於程序的mpm的穩定性。

二、模式切換

1.檢視模式

如果apache已經安裝,我們可以用"httpd -l"命令檢視當前模式。若找到 prefork.c 則表示當前工作在prefork模式,同理出現 worker.c 則工作在worker模式。

如果apache還未安裝,我們在編譯的時候可以加入 --with-pem=(prefork|worker) 選項決定啟用什麼模式。

2.切換模式

a. 將當前的prefork模式啟動檔案改名

mv httpd httpd.prefork
b. 將worker模式的啟動檔案改名

mv httpd.worker httpd
c. 修改apache配置檔案

d. 重新啟動服務

/usr/local/apache2/bin/apachectl restart
出於穩定性和安全性考慮,不建議更換apache2的執行方式,使用系統預設prefork即可。另外很多php模組不能工作在worker模式下,例如redhat linux自帶的php也不能支援執行緒安全。所以最好不要切換工作模式。

三、prefork和worker模式比較

prefork模式使用多個子程序,每個子程序只有乙個執行緒。每個程序在某個確定的時間只能維持乙個連線。在大多數平台上,prefork mpm在效率上要比worker mpm要高,但是記憶體使用大得多。prefork的無線程設計在某些情況下將比worker更有優勢:它可以使用那些沒有處理好執行緒安全的第三方模組,並且對於那些執行緒除錯困難的平台而言,它也更容易除錯一些。

worker模式使用多個子程序,每個子程序有多個執行緒。每個執行緒在某個確定的時間只能維持乙個連線。通常來說,在乙個高流量的http伺服器上,worker mpm是個比較好的選擇,因為worker mpm的記憶體使用比prefork mpm要低得多。但worker mpm也由不完善的地方,如果乙個執行緒崩潰,整個程序就會連同其所有執行緒一起"死掉"。由於執行緒共享記憶體空間,所以乙個程式在執行時必須被系統識別為"每個執行緒都是安全的"。

總的來說,prefork方式速度要稍高於worker,然而它需要的cpu和memory資源也稍多於woker。

(如果要想用worker模式,還不如使用nginx)

四、prefork模式配置詳解(根據官網翻譯的)

serverlimit 256

startservers 5

minspareservers 5

maxspareservers 10

maxclients 256

maxrequestsperchild 0

serverlimit

預設的maxclient最大是256個執行緒,如果想設定更大的maxclient值,就的設定這個serverlimit引數。20000是serverlimit這個引數的最大值。如果需要更大,則必須編譯apache,此前都是不需要重新編譯apache。生效前提:必須放在其他指令的前面。如果這個引數設定的值很高,那麼就會申請很多的無用共享記憶體。如果serverlimit和maxclients都設定成乙個很高的值,超過了系統的處理範圍,那麼apache很可能不會啟動或者系統變得不穩定。

startservers

指定伺服器啟動時建立的子程序數量。因為程序的數量是根據負載來動態控制得,所以這個引數可以不用修改。prefork預設為5。

minspareservers

指定空閒子程序的最小數量,預設為5。如果當前空閒子程序數少於minspareservers ,那麼apache將以最大每秒乙個的速度產生新的子程序。此引數不要設的太大。

maxspareservers

設定空閒子程序的最大數量,預設為10。如果當前有超過maxspareservers數量的空閒子程序,那麼父程序將殺死多餘的子程序。此引數不要設的太大。如果你將該指令的值設定為比minspareservers小,apache將會自動將其修改成"minspareservers+1"。

maxclients

限定同一時間客戶端最大接入請求的數量(單個程序併發執行緒數),預設為256。任何超過maxclients限制的請求都將進入等候佇列,一旦乙個鏈結被釋放,佇列中的請求將得到服務。要增大這個值,你必須同時增大serverlimit。

maxrequestsperchild

每個子程序在其生存期內允許處理的最大請求數量,預設為10000.到達maxrequestsperchild的限制後,子程序將會結束。如果 maxrequestsperchild為"0",子程序將永遠不會結束。將maxrequestsperchild設定成非零值有兩個好處:

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

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

六、總結

以前apache主流模式為prefork,現在worker模式也開始多了起來,區別來說,worker模式可以應對高流量,但是安全性不太好;prefork模式安全性比較好,但是效能會差一點,各位可以根據自己伺服器的類別選取不同的模式,更好的使用apache。

合理設定apache的最大連線數

1.在 設定?伺服器的為freebsd 6.2 apache 2.24,使用預設配置 freebsd 預設不載入自定義mpm配置 預設最大連線數是250 在 usr local etc apache22 httpd.conf中載入mpm配置 去掉前面的注釋 可見的mpm配置在 usr local e...

合理設定apache httpd的最大連線數

來自 1.在 設定?伺服器的為freebsd 6.2 apache 2.24,使用預設配置 freebsd 預設不載入自定義mpm配置 預設最大連線數是250 在 usr local etc apache22 httpd.conf中載入mpm配置 去掉前面的注釋 可見的mpm配置在 usr loca...

合理設定apache httpd的最大連線數

1.在 設定?伺服器的為freebsd 6.2 apache 2.24,使用預設配置 freebsd 預設不載入自定義mpm配置 預設最大連線數是250 在 usr local etc apache22 httpd.conf中載入mpm配置 去掉前面的注釋 可見的mpm配置在 usr local e...