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

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

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

И nginx config:

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:

Я думаю, что это можно решить, добавив размер буфера = 32768, но вряд ли из-за этого uWSGI убьет рабочих.

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

Ответ 1

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