apache2.4.x三種MPM介紹

三種MPM介紹 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

?

Apache?2.X??支持插入式并行處理模塊,稱為多路處理模塊(MPM)。在編譯apache時必須選擇也只能選擇一個MPM,對類UNIX系統,有幾個不同的MPM可供選擇,它們會影響到apache的速度和可伸縮性。?

Prefork?MPM?:?這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工作方式類似于Apache?1.3。它適合于沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。

這個MPM具有很強的自我調節能力,只需要很少的配置指令調整。最重要的是將MaxClients設置為一個足夠大的數值以處理潛在的請求高峰,同時又不能太大,以致需要使用的內存超出物理內存的大小。

?

Worker?MPM?:?此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。由于使用線程來處理請求,所以可以處理海量請求,而系統資源的開銷小于基于進程的MPM。但是,它也使用了多進程,每個進程又有多個線程,以獲得基于進程的MPM的穩定性。

每個進程可以擁有的線程數量是固定的。服務器會根據負載情況增加或減少進程數量。一個單獨的控制進程(父進程)負責子進程的建立。每個子進程可以建立ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求并將其傳遞給服務線程處理和應答。

?

不管是Worker模式或是Prefork?模式,Apache總是試圖保持一些備用的(spare)或者是空閑的子進程(空閑的服務線程池)用于迎接即將到來的請求。這樣客戶端就不需要在得到服務前等候子進程的產生。

?

Event?MPM:以上兩種穩定的MPM方式在非常繁忙的服務器應用下都有些不足。盡管HTTPKeepalive方式能減少TCP連接數量和網絡負載,但是?Keepalive需要和服務進程或者線程綁定,這就導致一個繁忙的服務器會耗光所有的線程。?Event?MPM是解決這個問題的一種新模型,它把服務進程從連接中分離出來。在服務器處理速度很快,同時具有非常高的點擊率時,可用的線程數量就是關鍵的資源限?制,此時Event?MPM方式是最有效的。一個以Worker?MPM方式工作的繁忙服務器能夠承受每秒好幾萬次的訪問量(例如在大型新聞服務站點的高峰時),而Event?MPM可以用來處理更高負載。值得注意的是,Event?MPM不能在安全HTTPHTTPS)訪問下工作。?

對于Event?模式,apache給出了以下警告:

This?MPM?is?experimental,?so?it?may?or?may?not?work?as?expected?.

這種MPM目前處于試驗狀態,他可能不能按照預期的那樣工作。

?

?

如何配置三種MPM ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

Prefork?UNIX平臺上默認的MPM,它所采用的預派生子進程方式也是apache?1.3中采用的模式。prefork?本身并沒有使用到線程,2.0?版本使用它是為了與1.3版保持兼容性;另一方面,perfork用單獨的子進程來處理不同的請示,之程之間是彼此獨立的,這也使其成為最穩定的MPM之一?。

如何查看當前安裝的Apache?的三種MPM

[root@localhost apache]# httpd -l
Compiled in modules:core.cprefork.chttp_core.cmod_so.c

如果你看到perfork.c?則表示當前為perfork?MPM模式。worker.c?則表示為?worker?MPM模式。

?

那么如何設置apacheMPM呢?

需要的apache?配置安裝的時候需要指定模式:

  [root@localhost httpd-2.4.1]# ./configure --prefix=/usr/local/apache2worker --enable-so --with-mpm=worker [root@localhost httpd-2.4.1]# make[root@localhost httpd-2.4.1]# make install

指定--with-mpm=NAME?選項指定MPMNAME就是你想使用的MPM的名稱。不指定模式的話,默認為Prefork?MPM?

?

那么如何配置成Event?MPM??

同我上面的方法一樣,只需要在安裝的時候加上以下參數:?--enable-nonportable-atomics=yes?

需要注意的是Event?MPM對于老的CPU可能是不支持的。

?

?

三種MPM參數分析 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

不管你安裝的是apache哪種MPM

在安裝完成之后打開.../apache/conf/extra/httpd-mpm.conf文件,找到如下配置:

?

#?perfork?MPM

復制代碼
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule> 
復制代碼

#?StartServers: 數量的服務器進程開始

#?MinSpareServers: 最小數量的服務器進程,保存備用

#?MaxSpareServers: 最大數量的服務器進程,保存備用

#?MaxRequestWorkers: 最大數量的服務器進程允許開始

#?MaxConnectionsPerChild: 最大連接數的一個服務器進程服務

prefork?控制進程在最初建立“StartServers”個子進程后,為了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩?個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設置的值為止。這種模式?可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能。MaxSpareServers設置了最大的空閑進程數,如果空閑進程數大于這個?值,Apache會自動kill掉一些多余進程。這個值不要設得過大,但如果設的值比MinSpareServers小,Apache會自動把其調整為?MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。??

MaxRequestsPerChild設置的是每個子進程可處理的請求數。每個子進程在處理了“MaxRequestsPerChild”個請求后將自?動銷毀。0意味著無限,即子進程永不銷毀。雖然缺省設為0可以使每個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:

1、可防止意外的內存泄?漏。2、在服務器負載下降的時侯會自動減少子進程數。

因此,可根據服務器的負載來調整這個值。

MaxRequestWorkers指令集同時將服務請求的數量上的限制。任何連接嘗試在MaxRequestWorkerslimit將通常被排隊,最多若干基于上ListenBacklog指令。?

在apache2.3.13以前的版本MaxRequestWorkers被稱為MaxClients?。

(MaxClients是這些指令中最為重要的一個,設定的是?Apache可以同時處理的請求,是對Apache性能影響最大的參數。其缺省值150是遠遠不夠的,如果請求總數已達到這個值(可通過ps?-ef|grep?http|wc?-l來確認),那么后面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以?處理的請求就越多,但Apache默認的限制不能大于256。)

?

#?worker?MPM?

復制代碼
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250 
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
復制代碼

#?StartServers: 初始數量的服務器進程開始

#?MinSpareThreads: 最小數量的工作線程,保存備用

#?MaxSpareThreads: 最大數量的工作線程,保存備用

#?ThreadsPerChild: 固定數量的工作線程在每個服務器進程

#?MaxRequestWorkers: 最大數量的工作線程

#?MaxConnectionsPerChild: 最大連接數的一個服務器進程服務

Worker?由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild線程數,各個線程獨立地處理請求。同樣,?為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閑線程數;

而MaxRequestWorkers?設置了同時連入的clients最大總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程?

MinSpareThreads和?MaxSpareThreads的最大缺省值分別是75和250。這兩個參數對Apache的性能影響并不大,可以按照實際情況相應調節?。

ThreadsPerChild是worker?MPM中與性能相關最密切的指令。ThreadsPerChild的最大缺省值是64,如果負載較大,64也是不夠的。這時要顯式使用?ThreadLimit指令,它的最大缺省值是20000。?

Worker模式下所能同時處理的請求總數是由子進程總數乘以ThreadsPerChild?值決定的,應該大于等于MaxRequestWorkers。如果負載很大,現有的子進程數不能滿足時,控制進程會派生新的子進程。默認最大的子進程總數是16,加大時?也需要顯式聲明ServerLimit(最大值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以?ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是ThreadsPerChild的整數倍,否則?Apache將會自動調節到一個相應值。

?

#?event?MPM

復制代碼
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule> 
復制代碼

#?StartServers:初始數量的服務器進程開始

#?MinSpareThreads: 最小數量的工作線程,保存備用

#?MaxSpareThreads: 最大數量的工作線程,保存備用

#?ThreadsPerChild: 固定數量的工作線程在每個服務器進程

#?MaxRequestWorkers: 最大數量的工作線程

#?MaxConnectionsPerChild: 最大連接數的一個服務器進程服務


轉載于:https://www.cnblogs.com/dyllove98/p/3202695.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 15. 三數之和 思考分析(雙指針解)

目錄初解&#xff1a;未考慮去重二解&#xff1a;未考慮去重位置三解&#xff1a;AC題目&#xff1a;給你一個包含 n 個整數的數組 nums&#xff0c;判斷 nums 中是否存在三個元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;請你找出所有滿足條件且…

十、非規則組織分析及其數學模型——鋸齒形斜紋組織

鋸齒形斜紋組織圖&#xff1a; 分析&#xff1a; 前半齒長度k&#xff0c;表示山谷到山峰的列數&#xff0c;也就是鋸齒的寬度&#xff1b; 鋸齒飛數s&#xff0c;表示山峰到山峰的行數&#xff0c;也就是鋸齒的高度。 起始點相差4格&#xff0c;也就是第一部分整體向上移動…

Linq lamdba GroupJoin外連接示例

其實用from..Linq語句做外連接簡單而且便于理解&#xff0c;我個人使用lamdba純粹是技術上的追求吧 DataTable exceldtnew DataTable();DataTable nomacdtnew DataTable();exceldt exceldt.AsEnumerable().GroupJoin(nomacdt.AsEnumerable(), a > a.Field<String>(&q…

ajax為什么有時候不行,為什么不能用ajax調用

Ajax取值時出現未知的運行時錯誤的解決方法在Ajax里經常會通過innerHTML來改變界面&#xff0c;這個比使用DOM要簡單一些。比如&#xff1a;element.innerHTML "put code here"不過&#xff0c;在IE中&#xff0c;有時候會出現"未知的運行時錯誤(unknown runti…

Java Hashtable size()方法與示例

哈希表類size()方法 (Hashtable Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the number of key-value pairs that exist in this Hashtable. size()方法用于返回此哈希表中存在…

十一、非規則組織分析及其數學模型——蘆席斜紋組織

蘆席斜紋組織&#xff1a; 該組織是由左斜和右斜有機的結合在一塊的&#xff0c;因為其外觀酷似蘆席故稱之為蘆席斜紋組織。 織物組織效果&#xff1a; 所需參數&#xff1a; 其基層組織采用雙面加強型斜紋&#xff0c;即分子和分母是相同的組織點&#xff0c;例如2上2下(2個經…

LeetCode 18. 四數之和 思考分析(雙指針解)

目錄需要注意的幾點1、去除剪枝操作2、去重操作的細節code以及效果&#xff1a;題目給定一個包含 n 個整數的數組 nums 和一個目標值 target&#xff0c;判斷 nums 中是否存在四個元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值與 target 相等&#…

圖解DotNet框架之一:編譯與執行引擎(上)

眾所周知,DotNet框架是非常龐大的,光項目創建時的種類就有WPF,WCF,WF這三種最新的技術,還有以前的Web,WinForm,Service,Mobile等等. 這么復雜和龐大的框架,用文字來描述是遠遠不夠的,所以我準備寫一系列圖文并茂的文章,把我所知道的所有Net框架中的東西全部串聯起來,希望可以給…

【Kissy WaterFall】實行手動加載數據

前言&#xff1a;由于Kissy WaterFall默認是監聽滾動事件來實現數據動態加載的&#xff0c;但是有一些情況要用到手動加載數據。以下是使用Kissy WaterFall實現手動加載數據的方法。 最終實現效果&#xff1a;點擊”逛更多的商店“會動態加載數據 步驟&#xff1a; 當一頁數據加…

web服務器文檔根目錄在哪里,web服務器根目錄在哪

web服務器根目錄在哪 內容精選換一換SSL證書通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道(訪問方式為HTTPS)&#xff0c;實現數據信息在客戶端和服務器之間的加密傳輸&#xff0c;可以防止數據信息的泄露。SSL保證了雙方傳遞信息的安全性&#xff0c;而且用戶可以通過…

console java_Java Console writer()方法與示例

console java控制臺類writer()方法 (Console Class writer() method) writer() method is available in java.io package. writer()方法在java.io包中可用。 writer() method is used to get a distinct PrintWriter object linked with this Console. writer()方法用于獲取與此…

二、圖片加載與保存

一、基本概念 1&#xff0c;什么是圖片&#xff1f; 答&#xff1a;圖像是結構化存儲的數據信息 2&#xff0c;圖像的屬性 答&#xff1a;1、通道數目&#xff0c;2、寬與高&#xff0c;3、像素數據&#xff0c;4、圖像類型 二、加載顯示圖像并保存 import cv2 import nump…

LeetCode 206. 反轉鏈表 思考分析

題目 反轉一個單鏈表。 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 進階: 你可以迭代或遞歸地反轉鏈表。你能否用兩種方法解決這道題&#xff1f; 迭代雙指針 從某公眾號&#xff08;代碼隨想錄&#xff09;搬過來的gif圖&…

hdu 2846 Repository 字典樹的變形

Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)                  Total Submission(s): 1129 Accepted Submission(s): 382 Problem DescriptionWhen you go shopping, you can search in repository…

怎樣看虛擬主機的服務器,虛擬主機怎么查看服務器類型

虛擬主機怎么查看服務器類型 內容精選換一換使用華為云提供的公共鏡像制作私有鏡像時&#xff0c;您需先購買云主機等云資源時鏡像選擇公共鏡像、云服務器類型建議統一選擇“s3 (通用計算型)”&#xff0c;在云主機安裝部署完商品&#xff0c;然后參照以下方式進行私有鏡像制作…

Win32動態庫 Lib文件哪去了

最近使用SQLite&#xff0c;用源文件.c和.h編譯SQLite的動態庫&#xff0c;編譯后發現沒有Lib文件。 原來&#xff1a;SQLite的.c文件沒有引用.h文件&#xff0c;添加引用&#xff0c;編譯&#xff0c;Lib文件有了。轉載于:https://www.cnblogs.com/yunuoyuhan/p/3204457.html

console java_Java Console format()方法與示例

console java控制臺類format()方法 (Console Class format() method) format() method is available in java.io package. format()方法在java.io包中可用。 format() method is used to write the formatted string to this Console with the help of the given string format…

Anaconda自帶Python編譯器Jupyter Notebook顯示代碼行數

ESC&#xff1a;進入命令行模式&#xff1b;按下H即可顯示各種快捷鍵信息 Enter&#xff1a;進入編輯模式 方法一&#xff1a;命令方法 一、點擊代碼段&#xff0c;按ESC&#xff0c;使代碼段顯示藍色&#xff0c;進入命令行模式 二、按下ShiftL&#xff0c;顯示代碼行數 方法…

ajax 服務器響應,ajax-服務器響應

如果需要獲得了來自服務器的響應&#xff0c;則使用XMLHttpRequest 對象的 responseText 或 responseXML 屬性responseText&#xff1a;獲得字符串形式的響應數據&#xff0c;當readyState屬性值變為4時&#xff0c;responseText屬性才可用&#xff0c;表明Ajax請求已經結束例&…

(轉)MOMO的Unity3D研究院之深入理解Unity腳本的執行順序(六十二)

http://www.xuanyusong.com/archives/2378 Unity是不支持多線程的&#xff0c;也就是說我們必須要在主線程中操作它&#xff0c;可是Unity可以同時創建很多腳本&#xff0c;并且可以分別綁定在不同的游戲對象身上&#xff0c;他們各自都在執行自己的生命周期感覺像是多線程&…