1. 程式人生 > >Apache worker/prefork模式說明及優化配置

Apache worker/prefork模式說明及優化配置

localhost read request lin 總數 proc 配置 minimum 最小

  --with-mpm=worker 編譯時可以指定 默認是perfork模式
查看模式
[root@localhost ~]# httpd -V | grep "Server MPM"
Server MPM: Worker
prefork模式(默認):

主進程
子進程 1
子進程 2
子進程 3

  使用的是多個子進程,而每個進程只有一個線程,每個進程在某個確定的時間只能維持一個連接。
工作原理:
  控制進程最初建立若幹個子進程,為了不在請求到來時再生成子進程,所以要根據需求不斷的創建新的子進程,最大可以達到每秒32個知道滿足需求為止。

安裝方法:
  在編譯時,指定參數--with-mpm=prefork 不加也可以,因為默認就是
優點:
  效率高,穩定,安全,對於線程調試困難的平臺來說,調試更容易些。
缺點:和worker模式比消耗資源更多,沒有worker模式並發高。
[root@localhost ~]# sed -rn ‘30,42p‘ /usr/local/httpd/conf/extra/httpd-mpm.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5 開機啟動進程
MinSpareServers 5 最小空閑
MaxSpareServers 10 最大空閑
MaxClients 150 最大進程數
MaxRequestsPerChild 0 一個進程不限制接收請求數
</IfModule>
worker模式
      
主進程    線程 1   線程 2
子進程 1   線程 1  線程 2
子進程 2   線程 1  線程 2
子進程 3   線程 1  線程 2

  是Apache2.x新引進來的模式,是線程與進程的結合,在worker模式下,會有多個子進程,每個子進程又會有多個進程,每個線程在某個確定的時間只能維持一個連接。
工作原理:
  由主控制進程生成若幹個子進程,而每個子進程中又包含固定的線程數,各個線程獨立處理請求,同樣為了不在請求到來時再生成線程,在配置文件中設置了最小和最大的空閑線程數及所有子進程中的線程總數,如果現有子進程中的線程總數不能滿足並發及負載,控制進程將派生新的子進程。
優點:內存占用比prefork模式低,適合高並發,高流量http服務
缺點:假如一個線程崩潰,整個進程就會被連同其任何線程一起死掉,由於線程共享內存空間,所以一個程式在運行時必須被系統識別為每個線程是安全的。服務穩定性不如prefork模式。
[root@localhost ~]# sed -rn ‘44,58p‘ /usr/local/httpd/conf/extra/httpd-mpm.conf
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2 起始進程
MaxClients 150 最大進程
MinSpareThreads 25 最小空閑線程
MaxSpareThreads 75 最大空閑線程
ThreadsPerChild 25 每個子進程的線程數量
MaxRequestsPerChild 0 一個子進程的最大請求 0表示不限
</IfModule>

覺得本文章不錯的可以分享給您的朋友或訂閱我,後期會分享更多的Linux技術文章

Apache worker/prefork模式說明及優化配置