1. 程式人生 > >三種MPM介紹

三種MPM介紹

預設為prefork模式,主要是考慮到穩定性的原因。
要切換到worker模式,則需要登入到linux上,進行如下操作:
進入/usr/sbin目錄
cd /usr/sbin
將當前的prefork模式啟動檔案改名
mv httpd httpd.prefork
將worker模式的啟動檔案改名
mv httpd.worker httpd

修改配置檔案vi /etc/httpd/conf/httpd.conf
找到裡邊的如下一段,可適當修改負載等引數:
<IfModule worker.c>
ServerLimit          10000     #允許配置的程序數上限
ThreadLimit          50        #每個子程序下邊的執行緒數上限
StartServers         500       #啟動時建立的子程序數
MaxClients           50000     #允許同時伺服的最大接入請求數量(最大執行緒數量)。
MinSpareThreads      1000      #最小空閒執行緒數
MaxSpareThreads      1500      #最大空閒執行緒數
ThreadsPerChild      10        #每個子程序下邊的執行緒數
MaxRequestsPerChild  500       #每個子程序在其生存期內允許伺服的最大請求數量
</IfModule>

重新啟動服務
/sbin/service httpd restart

------------------------------------------------------------------------------

如何切換apache2的prefork和worker模式

Apache HTTP伺服器被設計為一個強大的、靈活的能夠在多種平臺以及不同環境下工作的伺服器。
不同的平臺和不同的環境經常產生不同的需求,或是為了達到同樣的最佳效果而採用不同的方法。
Apache憑藉它的模組化設計很好的適應了大量不同的環境。
這一設計使得網站管理員能夠在編譯時和執行時憑藉載入不同的模組來決定伺服器的不同附加功能。

Apache2.0將這種模組化的設計延伸到了web伺服器的基礎功能上。
這個版本帶有多路處理模組(MPM)的選擇以處理網路埠繫結、
接受請求並指派子程序來處理這些請求。
比如,需要更好伸縮性的可以選擇象worker或event這樣執行緒化的MPM,
而需要更好的穩定性和相容性以適應一些舊的軟體可以用prefork 。 

在Redhat Linux的主要版本as4上,apache版本為httpd-2.0.5x,
預設為prefork模式,主要是考慮到穩定性的原因。
要切換到worker模式,則需要登入到linux上,進行如下操作:

進入/usr/sbin目錄
cd /usr/sbin

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

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

修改配置檔案vi /etc/httpd/conf/httpd.conf
找到裡邊的如下一段,可適當修改負載等引數:
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

重新啟動服務
/etc/init.d/httpd restart

即可換成worker方式啟動apache2

注意這裡可能會遇到錯誤:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP. Pre-configuration failed!
解決方法是將/etc/httpd/conf.d/php.conf檔案中的LoadModule開頭的那行程式碼註釋掉。
--------------------------

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

參考連結:

------------------------------------------------------------------------------------------------

apache兩種工作模式詳解

剛接觸這兩個配置時很迷糊,全部開啟或全部註釋沒有幾多變化。今天搜尋到這麼一篇講得還不錯的文章,看了幾篇,還是不能完全記住,做一個收藏。
空閒子程序:是指沒有正在處理請求的子程序。
1、prefork.c模組(一個非執行緒型的、預派生的MPM)
    prefork MPM 使用多個子程序,每個子程序只有一個執行緒。每個程序在某個確定的時間只能維持一個連線。在大多數平臺上,Prefork MPM在效率上要比Worker MPM要高,但是記憶體使用大得多。prefork的無執行緒設計在某些情況下將比worker更有優勢:他能夠使用那些沒有處理好執行緒安全的第三方模組,並 且對於那些執行緒除錯困難的平臺而言,他也更容易除錯一些。
ServerLimit   20000
StartServers   5
MinSpareServers   5
MaxSpareServers   10
MaxClients   1000
MaxRequestsPerChild 0
ServerLimit     2000
//預設的MaxClient最大是256個執行緒,假如想配置更大的值,就的加上ServerLimit這個引數。20000是ServerLimit這個引數的最大值。假如需要更大,則必須編譯apache,此前都是無需重新編譯Apache。
生效前提:必須放在其他指令的前面
StartServers   5
//指定伺服器啟動時建立的子程序數量,prefork預設為5。
MinSpareServers   5
//指定空閒子程序的最小數量,預設為5。假如當前空閒子程序數少於MinSpareServers ,那麼Apache將以最大每秒一個的速度產生新的子程序。此引數不要設的太大。
MaxSpareServers   10
//配置空閒子程序的最大數量,預設為10。假如當前有超過MaxSpareServers數量 的空閒子程序,那麼父程序將殺死多餘的子程序。此引數不要 設的太大。假如您將該指令的值配置為比MinSpareServers小,Apache將會自動將其修改成"MinSpareServers+1"。
MaxClients   256
//限定同一時間客戶端最大接入請求的數量(單個程序併發執行緒數),預設為256。任何超過MaxClients限制的請求都將進入等候佇列,一旦一個連結被釋放,佇列中的請求將得到服務。要增大這個值,您必須同時增大ServerLimit 。
MaxRequestsPerChild 10000
//每個子程序在其生存期內允許伺服的最大請求數量,預設為10000.到達MaxRequestsPerChild的限制後,子程序將會結束。假如MaxRequestsPerChild為"0",子程序將永遠不會結束。
將MaxRequestsPerChild配置成非零值有兩個好處:
1.能夠防止(偶然的)記憶體洩漏無限進行,從而耗盡記憶體。 
2.給程序一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動程序的數量。
工作方式:
一個單獨的控制程序(父程序)負責產生子程序,這些子程序用於監聽請求並作出應答。Apache總是試圖保持一些備用的 (spare)或是空閒的子程序 用於迎接即將到來的請求。這樣客戶端就無需在得到服務前等候子程序的產生。在Unix系統中,父程序通常以root身份執行以便邦定80埠,而 Apache產生的子程序通常以一個低特權的使用者執行。User和Group指令用於配置子程序的低特權使用者。執行子程序的使用者必須要對他所服務的內容有 讀取的許可權,但是對服務內容之外的其他資源必須擁有儘可能少的許可權。
2、worker.c模組(支援混合的多執行緒多程序的多路處理模組)
    worker MPM 使用多個子程序,每個子程序有多個執行緒。每個執行緒在某個確定的時間只能維持一個連線。通常來說,在一個高流量的HTTP伺服器上,Worker MPM是個比較好的選擇,因為Worker MPM的記憶體使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一個執行緒崩潰,整個程序就會連同其任何執行緒一起"死掉".由於執行緒共享記憶體空間,所以一個程式在執行時必須被系統識別為"每 個執行緒都是安全的"。
ServerLimit   50
ThreadLimit   200
StartServers   5
MaxClients   5000
MinSpareThreads   25
MaxSpareThreads   500
ThreadsPerChild   100
MaxRequestsPerChild 0
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",子程序將永遠不會結束。
將MaxRequestsPerChild配置成非零值有兩個好處:
1.能夠防止(偶然的)記憶體洩漏無限進行,從而耗盡記憶體。 
2.給程序一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動程序的數量。 
注意
對於KeepAlive連結,只有第一個請求會被計數。事實上,他改變了每個子程序限制最大連結數量的行為。
工作方式:
每個程序能夠擁有的執行緒數量是固定的。伺服器會根據負載情況增加或減少程序數量。一個單獨的控制程序(父程序)負責子程序的建 立。每個子程序能夠建立 ThreadsPerChild數量的服務執行緒和一個監聽執行緒,該監聽執行緒監聽接入請求並將其傳遞給服務執行緒處理和應答。Apache總是試圖維持一個備 用(spare)或是空閒的服務執行緒池。這樣,客戶端無須等待新執行緒或新程序的建立即可得到處理。在Unix中,為了能夠繫結80埠,父程序一般都是以 root身份啟動,隨後,Apache以較低許可權的使用者建立子程序和執行緒。User和Group指令用於配置Apache子程序的許可權。雖然子程序必須對 其提供的內容擁有讀許可權,但應該儘可能給予他較少的特權。另外,除非使用了suexec ,否則,這些指令配置的許可權將被CGI指令碼所繼承。
公式:
ThreadLimit >= ThreadsPerChild
MaxClients = MinSpareThreads+ThreadsPerChild
硬限制:
ServerLimi和ThreadLimit這兩個指令決定了活動子程序數量和每個子程序中執行緒數量的硬限制。要想改變這個硬限制必須完全停止伺服器然後再啟動伺服器(直接重啟是不行的)。
Apache在編譯ServerLimit時內部有一個硬性的限制,您不能超越這個限制。
prefork MPM最大為"ServerLimit 200000"
其他MPM(包括work MPM)最大為"ServerLimit 20000
Apache在編譯ThreadLimit時內部有一個硬性的限制,您不能超越這個限制。
mpm_winnt是"ThreadLimit 15000"
其他MPM(包括work prefork)為"ThreadLimit 20000
注意
使用ServerLimit和ThreadLimit時要特別當心。假如將ServerLimit和ThreadLimit配置成一個高出實際需要許多的值,將會有過多的共享記憶體被分配。當配置成超過系統的處理能力,Apache可能無法啟動,或系統將變得不穩定。


本文來自ChinaUnix部落格,如果檢視原文請點:http://blog.chinaunix.net/u1/34243/showart_1006587.html

相關推薦

MPM介紹

預設為prefork模式,主要是考慮到穩定性的原因。 要切換到worker模式,則需要登入到linux上,進行如下操作: 進入/usr/sbin目錄 cd /usr/sbin 將當前的prefork模式啟動檔案改名 mv httpd httpd.prefork 將worker模式的啟動檔案改名 mv ht

Hive快捷查詢:不啟用Mapreduce job啟用Fetch task方式介紹

should ima only cts 直接 mapr 問題 rom conf 如果查詢表的某一列,Hive中默認會啟用MapReduce job來完成這個任務,如下: hive>select id,name from m limit 10;--執行時hive會啟用

Mysql Binlog格式介紹及分析【轉】

delete -s 字符 ID color fine alt lte pan 一.Mysql Binlog格式介紹 Mysql binlog日誌有三種格式,分別為Statement,MiXED,以及ROW! 1.Statement:每一條會修改數據的sql

VM Ware中網絡適配器的模式介紹

sha 獨立計算 mage 需要 只需要 獨立 隨機生成 管理 網絡地址轉換 大家在安裝完虛擬機後,默認安裝了兩個虛擬網卡,VMnet1和VMnet8,如下圖:其中VMnet1是host網卡,用於host方式連接網絡的。VMnet8是NAT網卡,用於NAT方式連接網絡的。它

Apache Prefork、Worker和EventMPM分析

更多 可用 make ret 負載 install 插入 mic per 三種MPM介紹   Apache 2

Binlog日誌的模式介紹及模式修改

Binlog日誌的三種模式介紹   一、Binlog日誌的三種模式   1.1 Statement Level模式   每一條修改資料的sql都會記錄到master的bin_log中,slave在複製的時候sql程序會解析成master

CSS中定位介紹

在這段時間對CSS學習中到今天也終於能收個尾了,小編這篇會對CSS中的3種定位做一個詳細介紹 1.相對定位 相對定位:相對於自己原來的位置進行移動。 實際程式碼操作:對於標籤樣式先宣告 position:relative; 再描述移動方向與畫素大小 left帶正數向右移,以此

Unity中Canvas的Render Mode的模式介紹

Screen Space—Overlay:將UI渲染為攝像機檢視頂部的2D圖形(預設設定) Screen Space—Camera:也將UI渲染在攝像機檢視頂部,但UI元素可以進行透視效果旋轉 World Space:將畫布物件放置在場景中,就好像UI是3D場景中的一部分。

apache的mpm模式

穩定的模式有prefork  worker  event,編譯的時候,可以用configure的引數指定  --with-mpm = prefork | worker | event , 也可以編譯

Android中圖片圓形設定方法介紹

Android開發中經常會用到圓形圖片,比如在使用者頭像設定,現在提供三種主要實現方式: 方案一:使用第三方影象框架 Fresco 1、新增依賴 dependencies { compile 'com.facebook.fresco:f

在普通權限中,Linux用戶對文件的身份介紹

接下來 完全 target get con 手工 出了 文件和目錄 iis 在普通權限中,Linux用戶對文件只有三種身份,就是屬主、屬組和其他人;每種用戶身份擁有讀(read)、寫(write)和執行(execute)三種權限。但是在實際工作中,這三種身份實在是不夠用,我

處理大數據流常用的Apache框架:Storm、Spark和Samza。(主要介紹Storm)

領導 hdf 客戶端 orm 至少 per yar 持續性 apache 處理實時的大數據流最常用的就是分布式計算系統,下面分別介紹Apache中處理大數據流的三大框架: Apache Storm 這是一個分布式實時大數據處理系統。Storm設計用於在容錯和

VMware網絡介紹

子網 顯示 大學 用戶 box dhcp服務器 虛擬交換 比較 每次 前言 很多人安裝虛擬機的時候,經常遇到不能上網的問題,而vmware有三種網絡模式,對初學者來說也比較眼花聊亂,今天我就來基於虛擬機3種網絡模式,幫大家普及下虛擬機上網的背景知識。(博文原創自http:/

jenkins介紹部署及構建方式配置

構建 簡單 nbsp adding linu tle ref pass 默認 [隱藏] 1前言 1.1jenkins介紹 1.2jenkins好處 1.3我的jenkins實踐 1.4jenkins使用前提 2jenkins部署 2.1下面內容介紹 2.2環境介紹

《轉載》Apache HTTP Server 與 Tomcat 的連接方式介紹

之前 img 6.2 自定義 con 訪問 ont 是什麽 bsp 本文轉載自IBM developer 首先我們先介紹一下為什麽要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 t

Linux安裝軟件包的方法,rpm包介紹,rpm工具用法,yum工具用法,yum搭建本地倉庫

rpm yum 筆記內容:l 7.1 安裝軟件包的三種方法l 7.2 rpm包介紹l 7.3 rpm工具用法l 7.4 yum工具用法l 7.5 yum搭建本地倉庫筆記日期:2017.8.9 7.1 安裝軟件包的三種方法rpm工具類似於Windows的exe文件,可以直接進行安裝,而且安裝路徑和文件名

linux的gzip、bzip2、xz壓縮使用方法工具介紹

linux bzip2 gzip xz 壓縮打包介紹:常用壓縮文件類型:1、windows:.rar/.zip/.7z2、linux:.zip/.gz/.bz2/.xz/.tar/.gz/.tar/.bz2/.tar/.xzgzip壓縮工具:1、實驗,cd到/tmp目錄下,使用mkdi創建一個

day18--linux下gzip、bzip2、zip、xz壓縮工具的介紹

gzip bzip2 zip xz 6.1:壓縮打包介紹:壓縮:節省空間,方便傳輸,帶寬資源耗費變少:常用的壓縮文件類型:windows: .rar .zip .7zlinux: .zip .gz .bz2 .xz .tar.gz .ta

day18--linux下gzip、bzip2、xz壓縮工具的介紹

gzip bzip2 zip xz 6.1:壓縮打包介紹:壓縮:節省空間,方便傳輸,帶寬資源耗費變少:常用的壓縮文件類型:windows: .rar .zip .7zlinux: .zip .gz .bz2 .xz .tar.gz .ta