Apache 工作模式的優化深入
阿新 • • 發佈:2018-06-12
Apache優化 Apache工作模式 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)或者是空閑的子進程(空閑的服務線程池)用於迎接即將到來的請求。這樣客戶端就不需要在得到服務前等候子進程的產生。
總的來說 prefork方式速度要稍高於 worker, 然而它需要的CPU 和memory 資源也稍多於worker。
Prefork MPM : 這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工作方式類似於Apache 1.3。它適合於沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。
這個MPM具有很強的自我調節能力,只需要很少的配置指令調整。最重要的是將MaxClients設置為一個足夠大的數值以處理潛在的請求高峰,同時又不能太大,以致需要使用的內存超出物理內存的大小。
每個進程可以擁有的線程數量是固定的。服務器會根據負載情況增加或減少進程數量。一個單獨的控制進程(父進程)負責子進程的建立。每個子進程可以建立ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求並將其傳遞給服務線程處理和應答。
不管是Worker模式或是Prefork 模式,Apache總是試圖保持一些備用的(spare)或者是空閑的子進程(空閑的服務線程池)用於迎接即將到來的請求。這樣客戶端就不需要在得到服務前等候子進程的產生。
**下面將對 Prefork MPM 、Worker MPM 這兩種工作模式的配置介紹下 **
首先編譯那種Apache服務
# tar xzvf httpd-2.4.2.tar.gz -C /opt # tar xzvf apr-1.4.6.tar.gz -C /opt (支持Apache上層應用跨平臺,提供底層接口庫) # tar xzvf apr-util-1.4.1.tar.gz -C /opt # cp -R apr-1.4.6/ /opt/httpd-2.4.2/srclib/apr # cp -R apr-util-1.4.1/ /opt/httpd-2.4.2/srclib/apr-util # yum install gcc gcc-c++ make pcre pcre-devel -y //安裝環境 (pcre : 一個Perl庫,支持正則表達式) # yum install zlib-devel -y
.
# cd /opt/httpd-2.4.2
# ./configure --prefix=/usr/local/httpd --enable-deflate --with-mpm=prefork \ //選擇為prefork工作模式
--enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
.
# make && make install
# grep -v "#" /usr/local/httpd/bin/apachectl > /etc/init.d/httpd
# vi /etc/init.d/httpd 在文件最前面插入下面的
#!/bin/sh
# chkconfig:2345 85 15
# description:Apache is a World Wide Web server.
.
# chmod +x /etc/init.d/httpd
# chkconfig --add httpd
# chkconfig --list httpd
# chkconfig --level 35 httpd on //開機自啟動
# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf //生成軟連接方便管理朱配置文件
# vim /etc/httpd.conf(設置主配置文件)
ServerName www.benet.com:80
Listen 192.168.100.102:80
#Listen 80 //註釋該行
.
prefork模式
# vim /etc/httpd.conf
Include conf/extra/httpd-mpm.conf //去# 啟用httpd-mpm.conf 文件
# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_prefork_module>
StartServers 10 # 啟動時進程數
MinSpareServers 10 # 最小空閑進程數
MaxSpareServers 50 # 最大空閑進程數
MaxRequestWorkers 150 # 最大並發進程數
MaxConnectionsPerChild 0 # 最大連接數限制
</IfModule>
.
# /usr/local/httpd/bin/httpd -l //查看當前工作模式
# lsof -i:80 //查看Apache 進程運行的情況
.
worker模式
編譯安裝Apache 下面編譯工作模式指定為 --with-mpm=worker
其他安裝步驟參考上面
# cd /opt/httpd-2.4.2
# ./configure --prefix=/usr/local/httpd --enable-deflate --with-mpm=worker \ //選擇為worker工作模式
--enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
. .
# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module>
StartServers 2 #啟動時進程數
MinSpareThreads 25 #最小空閑線程數
MaxSpareThreads 75 #最大空閑線程數
ThreadsPerChild 25 #每個進程可以啟動的線程數量
MaxRequestWorkers 150 #線程數量最大值
MaxConnectionsPerChild 0 #最大連接數限制
ThreadLimit 64 #每個進程可以啟動的線程數量上限值
</IfModule>
Apache 工作模式的優化深入