MOD_WSGI 守护进程模式多个挂起的 httpd 进程

MOD_WSGI 守护进程模式多个挂起的 httpd 进程

作为一名 Python 开发人员,我对 mod_wsgi 的工作原理有所了解,即它会在每次请求时启动一个新的 Python 进程。这并不是说一个新的 httpd 进程,而是一个运行类似

python /path/to/my/wsgi.py <param> <param>

我对守护进程模式的理解是,如果 process=1(默认),则使用具有 15 个线程的单个进程来处理请求。但是当请求被处理时,httpd 进程会发生什么?

这里最大的问题是,在我的日志中,我看到多达 30 个 httpd 进程消耗了超过 3G 的内存。这说明什么?请求的代码从未终止?apache 阻塞了请求并且从未完成它?

编辑

我使用 ps aux d httpd 发现了大约 22 个进程。当我进行 strace 时,大多数进程都在等待,但有一个进程不停地打印以下内容:

select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
wait4(-1, 0x7fff9d6990ec, WNOHANG|WSTOPPED, NULL) = 0

在我看来哪一个像 SQL?

答案1

这是对 apache 配置的误解。我假设 mod_wsgi 在嵌入模式下运行时作为守护进程运行。apache worker.c 部分将进程数设置为 8,扩展为 25,这就是为什么有这么多待机进程的原因。

相关内容