成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Apache 工作的三種模式:Prefork、Worker、Event

FWHeart / 2995人閱讀

摘要:的三種工作模式服務(wù)器目前一共有三種穩(wěn)定的,多進程處理模塊模式。模式下所能同時處理的請求總數(shù)是由子進程總數(shù)乘以值決定的,應該大于等于。默認最大的子進程總數(shù)是,加大時也需要顯式聲明最大值是。

Apache 的三種工作模式(Prefork、Worker、Event)

Web服務(wù)器Apache目前一共有三種穩(wěn)定的MPM(Multi-Processing Module,多進程處理模塊)模式。

它們分別是prefork,worker、event,它們同時也代表這Apache的演變和發(fā)展。

本文原文轉(zhuǎn)自米撲博客:Apache 工作的三種模式:Prefork、Worker、Event

如何查看我們的Apache的工作模式呢?可以使用httpd -V 命令查看,如我安裝的Apache 2.4版本。

# httpd -V
Server version: Apache/2.4.34 (Unix)
Server built:   Aug  2 2018 19:44:29
Server"s Module Magic Number: 20120211:79
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)

或者,更直接的命令 httpd -l 或 apachectl -V | grep -i mpm

# httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
# apachectl -V | grep -i mpm
Server MPM:     event

這里使用的是event模式,在apache的早期版本2.0默認prefork,2.2版本是worker,2.4版本是event,詳見米撲博客:Apache 服務(wù)器負載低訪問慢的原因分析和優(yōu)化方案

在configure配置編譯參數(shù)的時候,可以使用--with-mpm=prefork|worker|event 來指定編譯為那一種MPM,當然也可以用編譯為三種都支持:--enable-mpms-shared=all,這樣在編譯的時候會在modules目錄下自動編譯出三個MPM文件的so,然后通過修改httpd.conf配置文件更改MPM

1、Prefork MPM

Prefork MPM實現(xiàn)了一個非線程的、預派生的web服務(wù)器。它在Apache啟動之初,就先預派生一些子進程,然后等待連接;可以減少頻繁創(chuàng)建和銷毀進程的開銷,每個子進程只有一個線程,在一個時間點內(nèi),只能處理一個請求。這是一個成熟穩(wěn)定,可以兼容新老模塊,也不需要擔心線程安全問題,但是一個進程相對占用資源,消耗大量內(nèi)存,不擅長處理高并發(fā)的場景。

圖片描述

如何配置在Apache的配置文件httpd.conf的配置方式:

 
    StartServers 5 
    MinSpareServers 5 
    MaxSpareServers 10 
    MaxRequestWorkers 250 
    MaxConnectionsPerChild 1000 
 

StartServers 服務(wù)器啟動時建立的子進程數(shù)量,prefork默認是5,

MinSpareServers 空閑子進程的最小數(shù)量,默認5;如果當前空閑子進程數(shù)少于MinSpareServers ,那么Apache將以最大每秒一個的速度產(chǎn)生新的子進程。此參數(shù)不要設(shè)的太大。

MaxSpareServers 空閑子進程的最大數(shù)量,默認10;如果當前有超過MaxSpareServers數(shù)量的空閑子進程,那么父進程會殺死多余的子進程。次參數(shù)也不需要設(shè)置太大,如果你將其設(shè)置比MinSpareServers 小,Apache會自動將其修改為MinSpareServers +1的數(shù)量。

MaxRequestWorkers 限定服務(wù)器同一時間內(nèi)客戶端最大接入的請求數(shù)量,默認是256;任何超過了MaxRequestWorkers限制的請求都要進入等待隊列,一旦一個個連接被釋放,隊列中的請求才將得到服務(wù),如果要增大這個數(shù)值,必須先增大ServerLimit。在Apache2.3.1版本之前這參數(shù)MaxRequestWorkers被稱為MaxClients。

MaxConnectionsPerChild 每個子進程在其生命周期內(nèi)允許最大的請求數(shù)量,如果請求總數(shù)已經(jīng)達到這個數(shù)值,子進程將會結(jié)束,如果設(shè)置為0,子進程將永遠不會結(jié)束。在Apache2.3.9之前稱之為MaxRequestsPerChild。

這里建議設(shè)置為非零,注意原因:

1)能夠防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存。

2)給進程一個有限壽命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量(重生的機會)。

2、Worker MPM

和prefork模式相比,worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創(chuàng)建一些線程,同時包括一個監(jiān)聽線程,每個請求過來會被分配到一個線程來服務(wù)。線程比起進程會更輕量,因為線程是通過共享父進程的內(nèi)存空間,因此,內(nèi)存的占用會減少一些,在高并發(fā)的場景下會比prefork有更多可用的線程,表現(xiàn)會更優(yōu)秀一些;另外,如果一個線程出現(xiàn)了問題也會導致同一進程下的線程出現(xiàn)問題,如果是多個線程出現(xiàn)問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全了,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)。

圖片描述

如何配置在Apache的配置文件httpd.conf的配置方式:

 
    StartServers 3 
    ServerLimit 16 
    MinSpareThreads 75 
    MaxSpareThreads 250 
    ThreadsPerChild 25 
    MaxRequestWorkers 400 
    MaxConnectionsPerChild 1000 
 

配置參數(shù)解釋:

StartServers 服務(wù)器啟動時建立的子進程數(shù)量,在workers模式下默認是3.

ServerLimit 系統(tǒng)配置的最大進程數(shù)量,默認不顯示,自己添加上

MinSpareThreads 空閑子進程的最小數(shù)量,默認75

MaxSpareThreads 空閑子進程的最大數(shù)量,默認250

ThreadsPerChild 每個子進程產(chǎn)生的線程數(shù)量,默認是64

MaxRequestWorkers / MaxClients 限定服務(wù)器同一時間內(nèi)客戶端最大接入的請求數(shù)量.

MaxConnectionsPerChild 每個子進程在其生命周期內(nèi)允許最大的請求數(shù)量,如果請求總數(shù)已經(jīng)達到這個數(shù)值,子進程將會結(jié)束,如果設(shè)置為0,子進程將永遠不會結(jié)束。在Apache2.3.9之前稱之為MaxRequestsPerChild。

這里建議設(shè)置為非零,注意原因:

1)能夠防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存;

2)給進程一個有限壽命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量(重生的機會)。

Worker模式下所能同時處理的請求總數(shù)是由子進程總數(shù)乘以ThreadsPerChild值決定的,應該大于等于MaxRequestWorkers。

如果負載很大,現(xiàn)有的子進程數(shù)不能滿足時,控制進程會派生新的子進程。默認ServerLimit 最大的子進程總數(shù)是16,加大時也需要顯式聲明ServerLimit(最大值是20000)。

需要注意的是,如果顯式聲明了ServerLimit,那么它乘以 MaxRequestWorkers必須是hreadsPerChild的整數(shù)倍,否則 Apache將會自動調(diào)節(jié)到一個相應值。

3、Event MPM

這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。這增強了在高并發(fā)場景下的請求處理。

圖片描述

如何配置在Apache的配置文件httpd.conf的配置方式:

 
    StartServers 3 
    ServerLimit 16 
    MinSpareThreads 75 
    MaxSpareThreads 250 
    ThreadsPerChild 25 
    MaxRequestWorkers 400 
    MaxConnectionsPerChild 1000 
 

event 模式與 worker 模式完全一樣,參考 worker 模式參數(shù)即可,這里不再重復。

Apache httpd 能更好的為有特殊要求的站點定制。

例如,要求更高伸縮性的站點可以選擇使用線程的 MPM,即 worker 或 event; 需要可靠性或者與舊軟件兼容的站點可以使用 prefork。

常見問題

查看apache的error日志,可以發(fā)現(xiàn)許多系統(tǒng)運行中的問題。

server reached MaxRequestWorkers setting

[mpm_prefork:error] [pid 1134] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
進程或者線程數(shù)目達到了MaxRequestWorkers,可以考慮增加這個值,當然先考慮增加硬件,如內(nèi)存大小、CPU、SSD硬盤等。

scoreboard is full

[mpm_event:error] [pid 7555:tid 140058436118400] AH00485: scoreboard is full, not at MaxRequestWorkers

這個問題好像是apache2自帶的bug,我們無力解決。好在這個問題一般只會影響單個線程,所以暫時可以忍。

StackOverflow: Scoreboard is full,not at MaxRequestWorkers

1、I had this same problem. I tried different Apache versions and MPMs. I seem to get this alot with MPM Worker. Also error does not reoccur using Apache 2.2.2,Are you using cPanel? IF so try /upcp --force and increase StartServers to a higher amount like 50 as that"s all I did to get this error away.

2、Try EnableMMAP Off in 00_default_settings.conf

apache 主要版本有:

Version 2.4 (Current)

Version 2.2 (Historical)

Version 2.0 (Historical)

Version 1.3 (Historical)

參考:https://httpd.apache.org/docs/

關(guān)于 Apache 配置優(yōu)化,請參見米撲博客:Apache 服務(wù)器負載低訪問慢的原因分析和優(yōu)化方案

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/40269.html

相關(guān)文章

  • Apache 工作三種模式PreforkWorker、Event

    摘要:的三種工作模式服務(wù)器目前一共有三種穩(wěn)定的,多進程處理模塊模式。模式下所能同時處理的請求總數(shù)是由子進程總數(shù)乘以值決定的,應該大于等于。默認最大的子進程總數(shù)是,加大時也需要顯式聲明最大值是。 Apache 的三種工作模式(Prefork、Worker、Event) Web服務(wù)器Apache目前一共有三種穩(wěn)定的MPM(Multi-Processing Module,多進程處理模塊)模式。 它...

    learning 評論0 收藏0
  • #yyds干貨盤點#Apache三種模式

    1.Apache prefork模型:apache的默認的模型預派 生模式,有 一個主控制進程,然后 生成多個 子進程,使 用select模型,最 大并發(fā)1024,每個 子進程有 一個獨 立的線程響應 用戶請求,相對 比較占 用內(nèi)存,但是 比較穩(wěn)定,可以設(shè)置最 大和最 小進程數(shù),是最古 老 的 一種模式,也是最穩(wěn)定的模式,適 用于訪問量 不 是很 大的場景。優(yōu)點:穩(wěn)定缺點: 大量 用戶訪問慢,占...

    loonggg 評論0 收藏0
  • Apache--MPMs && Nginx事件驅(qū)動

    摘要:全稱是多道處理模塊我們都知道是以模塊化方式設(shè)計的那么用來決定如何處理用戶請求的是通過一個進程處理一個請求還是一個線程處理一個請求當前有三種可以選擇的方式雖然有以上三種方式但是要注意在任何時間必須有一個而且只能有一個被使用那么下面就介紹一下這 MPM全稱是多道處理模塊,我們都知道apache是以模塊化方式設(shè)計的.那么MPM用來決定apache如何處理用戶請求的.是通過一個進程處理一個請...

    ivydom 評論0 收藏0
  • Apache--MPMs && Nginx事件驅(qū)動

    摘要:全稱是多道處理模塊我們都知道是以模塊化方式設(shè)計的那么用來決定如何處理用戶請求的是通過一個進程處理一個請求還是一個線程處理一個請求當前有三種可以選擇的方式雖然有以上三種方式但是要注意在任何時間必須有一個而且只能有一個被使用那么下面就介紹一下這 MPM全稱是多道處理模塊,我們都知道apache是以模塊化方式設(shè)計的.那么MPM用來決定apache如何處理用戶請求的.是通過一個進程處理一個請...

    muzhuyu 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<