【问题标题】:apache/mod_wsgi: How do I spawn specific number of processes?apache/mod_wsgi:如何生成特定数量的进程?
【发布时间】:2012-04-23 23:22:49
【问题描述】:

当使用带有 WSGIDaemonProcess 设置的 mod_wsgi 时,如何在 Apache 中生成特定数量的进程?

我的 VirtualHost 设置如下(作为测试):

WSGIDaemonProcess webserver user=webserver group=webserver processes=24 threads=8 display-name=%{GROUP} python-path=/var/virtualenv/lib/python2.6/site-packages

虽然我的 httpd.conf 设置如下:

<IfModule prefork.c>
StartServers       8
MinSpareServers    1
MaxSpareServers    8
ServerLimit       24
MaxClients        24
MaxRequestsPerChild  4000
</IfModule>

请注意,我正在运行一个非常受限的 256MB 服务器,同时安装了 PostgreSQL 数据库。

但是,系统显示的 apache 进程远远超过 24 个(超过 30 个)。我预计如果我将 ServerLimit 设置为与 WSGIDaemonProcess 中的进程相同,它将以常量 24 运行。但是,似乎有一堆空闲进程正在运行,原因不明?

【问题讨论】:

    标签: mod-wsgi apache


    【解决方案1】:

    ServerLimit 指令与 mod_wsgi 守护程序模式无关。 WSGIDaemonProcess 的“进程”选项指定 mod_wsgi 将创建多少个守护进程。它是一个静态数字而不是动态数字,因此只需将其设置为您需要的数量即可。对于每个进程的线程数,将其设置为超过 'processes=3' 开始是没有意义的,因为您在 Apache 子工作进程中被限制为 24 个并发请求,这些请求将请求代理到 mod_wsgi 守护进程,所以不是可以处理更多的请求。

    一般来说,如果您在内存受限的环境中运行,那么您不应该使用 prefork MPM,而是使用 worker MPM。是否有必须的原因,例如还需要运行 PHP 代码?如果不是,请更改使用的 MPM。

    您还可以如何进行配置实际上取决于您的代码、响应时间和请求吞吐量,这些只有您自己知道。

    【讨论】:

    • 我正在运行 pre-fork,主要是因为我不知道它是否对 django 和并发有任何影响。那是我应该担心的事情吗?此外,如果 WSGIDaemonProcess 的“进程”选项是独立的,有没有办法防止 Apache 产生未使用的进程?我只使用这个服务器来服务 mod_wsgi/django 项目。
    • 因为您在守护进程模式下运行 Django(假设您已经使用 WSGIProcessGroup 正确委派了它),所以 Django 没有在 MPM 设置所涵盖的 Apache 子进程中运行,那么是否无关紧要你使用 prefork 或 worker MPM。为了减少内存并避免启动您并不真正需要的进程,您应该使用 worker MPM 而不是 preform MPM。更改 MPM,您将立即消除额外的进程,因为子工作者将使用多线程。
    • 如何验证守护进程模式是否被正确委派?
    • 另外,当我将 MPM 更改为 Worker 时,将只有一个带有线程的进程(根据需要)。直到有需要时才会产生线程,即在我的情况下它从不提供服务请求?
    • 要验证是否使用守护程序模式,请阅读“code.google.com/p/modwsgi/wiki/…”。线程在池中预先创建并重用。它们不是按需创建的,也不是随后被销毁的。他们坚持整个过程。您应该使用您真正需要的最少线程数进行配置,否则未使用但处于活动状态的线程仍会消耗内存。
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多