4

在运行 nginx 的生产环境中,返回到 apache mpm-prefork/mod_wsgi,我看到90 个apache 子进程,而我预计最多 40 个,如下配置。配置/设置并不令人兴奋:

  1. nginx 通过反向代理到 apache proxy_pass,并提供静态媒体
  2. apache 只提供动态请求

相关的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

我错过了什么吗?

4

3 回答 3

10

mod_wsgi 守护进程看起来像是 Apache 服务器子进程,即使它们并不相同。这是因为 mod_wsgi 守护进程是 Apache 父进程的 fork,而不是 fork/exec。换句话说,它们的可执行文件名称不会改变。

为了能够将 mod_wsgi 守护进程与普通的 Apache 服务器子进程区分开来,请为 WSGIDaemonProcess 提供“显示名称”选项。此选项允许您将进程重命名为在“ps”程序和某些程序变体(如“top”)的输出中可见。请参阅 mod_wsgi 站点上的 WSGIDaemonProcess 指令文档。

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

于 2009-06-24T11:14:09.333 回答
0

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

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

于 2009-05-27T04:40:32.867 回答
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 只处理动态内容。它可以帮助减少内存消耗和更好的可扩展性。

于 2009-05-27T10:16:46.080 回答