【Apache】Ubuntu下配置Apache的Worker模式

其實Apache本身的併發能力是足夠強大的,但是Ubuntu默認安裝的是Prefork模式下的Apache。所以導致很多人後面盲目的去安裝lighttpd或者nginx一類替代軟件。但是這類軟件有一定的兼容問題,部分情況下可能工作的並不好。那麼, 是不是Apache併發就不行了呢?——答案當然是否定的。

在進行配置之前,我們首先要知道什麼是Prefork模式,什麼是Worker模式,什麼是Event模式,以及什麼是MPM。

MPM是Apache2引入的一個概念,就是將結構模塊化。把核心任務處理作爲一個可插拔的模塊,即MPM,使其能針對不同的環境進行優化。在這個情況下,就誕生出了處理模式的概念。處理模式現在分爲Prefork、Worker、Event三種。

Prefork MPM基於非線程模型,和Apache 1.x版本中的處理方式很相似。Prefork MPM在所有情況下都很安全,對運行非線程安全(non-thread-safe)模式的軟件如PHP,它是唯一的安全選擇。對於某些應用程序,包括在 Apache 1.3上非常流行的程序(如簡單靜態頁面、CGI腳本等),Prefork MPM是最好的選擇。另一方面,prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成爲最穩定的MPM之一。但是由於每一個請求都會產生一個新的進程,導致系統資源(尤其是內存)消耗的很快,一旦併發量較大的時候,大量的Apache進程會佔用巨大的內存空間。

而Worker MPM基於線程模式,具有內存消耗低(對繁忙的服務很重要)、擴展性在某些特定應用情況下比Prefork更好等優點。在這個模式下,採用的進程和線程混合的形式處理請求。由於使用線程來處理,所以可以處理相對海量的請求,而系統資源的開銷要小於基於進程的Prefork模式。

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

一目瞭然,三種MPM模式各有各的優缺點。但是如果我們經常遇到訪問量一大,服務器資源就吃緊的情況,那麼就是Prefork模式瓶頸了。在其他兩類MPM中,通用的做法還是使用Worker模式來解決問題。Event MPM由於不支持安全連接(HTTPS)所以導致應用有一定的侷限性。

下面我們就以Ubuntu下將Apache的模式從Prefork設置爲Worker爲例,來說明一下操作步驟。前面也提到了,由於Worker模式與PHP的執行方式不同,所以如果簡單的輸入apt-get install apache2-mpm-worker,會導致PHP無法使用。當然了,如果你的網頁只有靜態頁面,不需要使用PHP,那麼使用上面這條指令就會搞定一切。這裏我們着重討論下要使用PHP的情況下,應該如何配置Apache的Worker模式。

1. 安裝Apache的fcgid模塊,使用它來啓用PHP。

#apt-get install libapache2-mod-fcgid

2. 設置fcgid模塊的配置文件,使其能夠調用PHP。

#vim /etc/apache2/mods-available/fcgid.conf

將文件內的原來文本全部刪除掉,然後添加下面的文本:

<IfModule mod_fcgid.c>
AddHandler fcgid-script .php .py .pl .fcgi
SocketPath /var/lib/apache2/fcgid/sock
IPCConnectTimeout 20
</IfModule>

3. 安裝php5-cgi。

#apt-get install php5-cgi

4. 設置Apache的配置文件,使其能夠調用fcgid模塊來啓動PHP。

#vim /etc/apache2/apache2.conf

在文件最後添加下面的內容:

<Directory />
FCGIWrapper /usr/bin/php5-cgi .php
Options ExecCGI SymLinksIfOwnerMatch
</Directory>

5. 安裝Apache的Worker MPM模塊。

#apt-get install apache2-mpm-worker

需要注意的是,如果之前有安裝了php5-gd和php5-mysql模塊,Ubuntu在配置Apache的Worker模式的時候可能會將其卸載,可以重新安裝一次以防萬一:

#apt-get install php5-gd php5-mysql

這樣就成功的完成了Apache的Worker MPM模塊配置工作,現在Apache將會以Worker模式運行了。你會發現你的站點負載能力又會大大的提升,內存資源也會充裕很多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章