Как да разберете защо uWSGI убива работници?

Имам приложение на Pyramid. Пускам го в 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 може да убива работници? И как да знам причината? Редът "ПО дяволите! работник 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