Как узнать, почему uWSGI убивает воркеров?

у меня есть приложение на пирамиде. Я запускаю его в uWSGI со следующей конфигурацией:

[uwsgi]
socket = mysite:8055
master = true
processes = 4
vacuum = true
lazy-apps = true
gevent = 100

И конфиг nginx:

server {
    listen 8050;
    include uwsgi_params;

    location / {
        uwsgi_pass mysite:8055;
    }
}

Обычно все нормально, но иногда uWSGI убивает воркеров. И я понятия не имею, почему.

Я вижу в журналах uWSGI:

DAMN ! worker 2 (pid: 4247) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 2 (new pid: 4457)

но в журналах нет исключений Python.

иногда я вижу в журналах uWSGI:

invalid request block size: 11484 (max 4096)...skip
[uwsgi-http key: my site:8050 client_addr: 127.0.0.1 client_port: 63367] hr_instance_read(): Connection reset by peer [plugins/http/http.c line 614]

И nginx errors.log:

*13388 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1,
*13955 recv() failed (104: Connection reset by peer) while reading response header from upstream, client:

Думаю, это можно решить, добавив buffer-size=32768, но вряд ли из-за этого uWSGI убьет воркеров.

Почему uwsgi может убивать рабочих? И как мне узнать причину? Строка "DAMN! Worker 2 (pid: 4247) умер,..." ни о чем не говорит.


person Greg Eremeev    schedule 20.08.2014    source источник


Ответы (3)


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

person doxin    schedule 19.02.2015
comment
попробуйте понаблюдать за рабочими процессами с помощью монитора процессов и посмотрите, не использует ли он много памяти. Как мне это сделать? - person elethan; 05.10.2017
comment
Просто добавить для кого-то: используйте этот uwsgitop pypi.python.org/pypi/uwsgitop/0.10 или команда htop и отфильтровать записи в uwsgi и посмотреть, сколько памяти потребляется - person Saad Abdullah; 20.03.2018
comment
Я не уверен, как это очевидно из команды uwsgitop для фильтрации записей. Когда я следовал этим шагам, он автоматически обновлял экран в терминале, хотя он действительно включал память, когда я включал флаг --memory-report. - person AlanSE; 15.11.2018

Попробуйте добавить опцию harakiri-verbose = true в конфигурацию uWSGI.

person Mikhail Gerasimov    schedule 22.04.2020

У меня была та же проблема, для меня изменение файла uwsgi.ini, изменение значения параметра reload-on-rss с 2048 на 4048 и harakiri на 600 решило проблему.

person Alexandre Neukirchen    schedule 07.08.2020