Apache 子进程未退出且未终止

Apache 子进程未退出且未终止

我正在使用 Debian 9、Apache 2.4、mod_wsgi 4.5、django 1.11 和 python 2.7 运行 Web 应用程序。

我的 apache 配置是

ServerTokens Prod
ServerSignature Off
FileETag MTime Size
Header set X-Frame-Options SAMEORIGIN
<Location />
    <LimitExcept HEAD GET POST PUT DELETE>
        order deny,allow
        deny from all
    </LimitExcept>
</Location>

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

WSGIRestrictEmbedded On

<VirtualHost *:443>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.<server name>$
    RewriteRule ^(.*)$ https://<server name>/ [R=301,L]

    SSLEngine On
    SSLProtocol +TLSv1.1 +TLSv1.2
    SSLHonorCipherOrder On
    SSLCertificateFile /path/to/cert.crt
    SSLCertificateKeyFile /path/to/key.key
    #Change needed in release..This resolves cert issue.
    SSLCertificateChainFile /path/to/ca.ca-bundle

    ServerName <server name>
    ServerAlias <secondary server name>

    DocumentRoot /path/to/root

    #Alias /robots.txt /path/to/root/robots.txt
    #Alias /favicon.ico /path/to/root/images/favicon.ico
    #Alias /fonts/ /path/to/root/fonts/
    Alias /images/ /path/to/root/images/
    Alias /style/ /path/to/root/style/
    Alias /js/ /path/to/root/js/

    Alias /admin/css/ /path/to/root/admin/css/
    Alias /admin/img/ /path/to/root/admin/img/
    Alias /admin/js/ /path/to/root/admin/js/

    <Directory /path/to/root/>
        Options -Indexes
        # backwards compatibility with apache 2.2
        Order allow,deny
        Allow from all

        # forward compatibility with apache 2.4
        Require all granted
        Satisfy Any
    </Directory>

    WSGIScriptAlias / /path/to/root/wsgi.py
    WSGIPassAuthorization On
    WSGIDaemonProcess <server name> processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup <server name>

    <Directory /usr/local/www/wsgi-scripts>
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

每天 apache 都会轮换其日志(使用 logrotate)并发出 greaceful restart(服务重新加载)。

但是,并非所有子进程都会退出。一个子进程挂了,apache 继续向其发送请求进行处理,但该子进程无法正常运行,不断输出以下错误消息到旧日志文件

(2)没有这样的文件或目录:[客户端 [我的 ip]:50202] mod_wsgi(pid=32714):无法以 uid=33 的用户身份连接到 '/var/run/apache2/wsgi.2629.0.1.sock' 上的 WSGI 守护进程'[守护进程名称]'

这导致网络服务器返回 503。

正确重启后,问题将得到解决,持续一天,直到下一次日志轮换。

据我所知,孩子们应该完成他们正在做的事情然后退出,所以我想也许一些保持活动阻止了这一点(对该服务器进行了一些高频 api 调用),所以我尝试添加KeepAlive off但没有成功。

有人知道这是怎么回事吗?谢谢。

编辑:作为一种解决方法,我编辑了 apache logrotate 文件,使其在轮换后重新启动,而不是重新加载。现在我得到了

child process 4591 still did not exit, sending a SIGTERM

child process 4591 still did not exit, sending a SIGKILL

我预计即使在进程未退出后重新加载也会发生这种情况。 apache 有这样的选项吗?

相关内容