2009-05-27 26 views
4

在生產環境中運行nginx反轉回apache mpm-prefork/mod_wsgi,即時看到 apache子進程,當我期望40將是最大的配置如下。配置/設置是平平淡淡:apache prefork/mod_wsgi產生的進程計數看似過去的配置

  1. nginx的是反向代理通過proxy_pass到Apache和服務靜態媒體
  2. 阿帕奇僅提供動態請求

相關nginx的配置:

worker_processes 15; 

events { 
    worker_connections 1024; 
} 

keepalive_timeout 10; 

相關的apache配置:

KeepAlive Off 
MaxKeepAliveRequests 100 
KeepAliveTimeout 15 

<IfModule mpm_prefork_module> 
    StartServers  20 
    MinSpareServers  7  
    MaxSpareServers  10 
    MaxClients   200 
    MaxRequestsPerChild 0 
</IfModule> 

mod_wsgi的配置,其中webapp是進程的名稱:

WSGIDaemonProcess webapp user=www group=users threads=1 processes=40 

我這麼想嗎?

回答

10

即使mod_wsgi守護進程不相同,mod_wsgi守護進程也會顯示爲Apache服務器子進程。這是因爲mod_wsgi守護進程是Apache父進程的一個分支,而不是fork/exec。換句話說,他們的可執行文件名稱不會改變。

爲了能夠區分mod_wsgi守護進程和普通的Apache服務器子進程,給「WSGIDaemonProcess」提供'display-name'選項。這個選項允許你將程序重命名爲'ps'程序的輸出以及'top'等程序的一些變體。請參閱mod_wsgi站點上的WSGIDaemonProcess指令的文檔。

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

+0

因此mod_wsgi配置中的`processes`與Apache的`StartServers`無關? – Carson 2009-11-25 19:20:47

0

可能有比WSGI實例更多的apache進程。

如果您想限制apache進程,請將apache的MaxClients更改爲40。

0

您在daemon模式下使用mod_wsgi,所以mod_wsgi進程和Apache處理程序進程是獨立的。

由Apache之後您的配置開始您有:

  • 40(進程=)mod_wsgi進程同時開工。
  • 20(StartServers)如果沒有傳入活動,Apache處理程序進程可以自動減少到10(MaxSpareServers)。

然後在加載時,Apache處理程序進程可以增長到200(MaxClients)。但mod_wsgi進程數將會是相同的 - 40.

我的建議是使用worker mpm比Apache只處理動態內容。它可以幫助減少內存消耗和更好的可伸縮性。