我使用mod wsgi在apache中运行django应用程序。从以下配置开始,我已将服务器限制设置为1.
<IfModule worker.c>
StartServers 1
ServerLimit 1
#MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
一开始,apache运行一台服务器。但经过一段时间我正在检查它运行两个服务器。我在error.log
中收到以下错误[mpm_worker:notice] [pid 46754:tid 139924109117568] AH00297: SIGUSR1 received. Doing graceful restart.
如何确保只使用一台服务器运行apache。而不是重新启动。
答案 0 :(得分:2)
Apache运行父进程,然后运行具有该配置的一个子工作进程。父进程的大小非常小,因为它所做的只是管理子进程进程并在它死亡时重新启动它等。请求只由子进程进程处理。所以你所看到的是正常的。
为什么要尝试将其限制为一个进程?如果要满足只能有一个进程的WSGI应用程序的某些要求,那么无论如何都不应该使用嵌入式模式。使用mod_wsgi的守护进程模式,在这种情况下,WSGI应用程序默认使用一个进程。
然后放回Apache MPM设置,然后使用:
WSGIRestrictEmbedded On
WSGIDaemonProcess myapp
WSGIScriptAlias / /some/path/myapp.wsgi process-group=myapp application-group=%{GLOBAL}
这将导致Apache父进程,但Apache需要接受和代理请求的许多子工作进程,以及运行子工作进程的WSGI应用程序的单个mod_wsgi守护程序进程代理请求。