apache prefork / mod_wsgi产生的进程计数看似过去的配置

时间:2009-05-27 02:09:01

标签: python apache mod-wsgi

在运行nginx的生产环境中反转回apache mpm-prefork / mod_wsgi,我看到 90 apache子进程,当我预计40将是最大值时,如下所示。配置/设置并不令人兴奋:

  1. nginx通过proxy_pass反向代理apache,并提供静态媒体
  2. apache仅提供动态请求
  3. 相关的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 config,其中webapp是进程的名称:

    WSGIDaemonProcess webapp user=www group=users threads=1 processes=40
    
    我错过了什么吗?

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:0)

可能有比WSGI实例更多的apache进程。

如果要限制apache进程,请将apache的MaxClients更改为40。

答案 2 :(得分:0)

您在守护进程模式下使用mod_wsgi,因此mod_wsgi进程和Apache处理程序进程是独立的。

在apache启动后立即进行配置:

  • 40(processes =)mod_wsgi个进程同时启动。
  • 20(StartServers)如果没有传入活动,Apache处理程序进程可以自动减少到10(MaxSpareServers)。

然后在加载时,Apache处理程序进程可以增长到200(MaxClients)。但是mod_wsgi进程计数将是相同的 - 40。

我的建议是使用worker mpm而不是Apache只处理动态内容。它可以帮助减少内存消耗和更好的可伸缩性。