Назад | Перейти на главную страницу

Дочерний процесс Apache не завершается и не завершается

Я запускаю веб-приложение с Debian 9, Apache 2.4, mod_wsgi 4.5, django 1.11 и python 2.7.

Мой apache conf

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) и выполняет быстрый перезапуск (перезагрузка службы).

Однако не все дочерние процессы завершаются. Один из них зависает, и apache продолжает отправлять ему запросы для обработки, но этот дочерний элемент не может работать должным образом, постоянно выводя следующее сообщение об ошибке в старый файл журнала:

(2)No such file or directory: [client [my ip]:50202] mod_wsgi (pid=32714): Unable to connect to WSGI daemon process '[daemon process name]' on '/var/run/apache2/wsgi.2629.0.1.sock' as user with uid=33

Это заставляет веб-сервер возвращать 503.

После правильного перезапуска проблема решается в течение суток до следующей ротации журнала.

Насколько я понимаю, дети должны завершить все, что они делают, и выйти, поэтому я подумал, что, возможно, некоторые keep alive препятствуют этому (на этот сервер выполняются некоторые высокочастотные вызовы 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 такая опция?