2017-01-21 6 views
1

Я запускаю приложение для фляги (rest api) с помощью стрельбы из лука и вижу почти каждые 30 секунд партию [CRITICAL] WORKER TIMEOUT (pid:14727). Мои настройки являются следующие: gunicorn --worker-class gevent --timeout 30 --graceful-timeout 20 --max-requests-jitter 2000 --max-requests 1500 -w 50 --log-level DEBUG --capture-output --bind 0.0.0.0:5000 run:app я видел предыдущий пост, который сказал, чтобы бросить больше оперативной памяти в этом, но от взглядов его: $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 513926 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 131071 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 1550298 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Куча неограничен и размер стека чуть более 8 Мб.Работник-гиганта убит

Спасибо за помощь!

Edit: образец из бревен:

+0000] [26657] [DEBUG] GET /timer 
[2017-01-21 14:07:30 +0000] [26657] [DEBUG] GET /timer 
[2017-01-21 14:07:33 +0000] [26657] [DEBUG] GET /timer 
[2017-01-21 14:07:33 +0000] [26652] [DEBUG] GET /timer 
10.193.80.149 - - [21/Jan/2017:14:07:34 +0000] "GET /timer?id=699ec59eccd3fb929b3dd7707e542ed15acd4181:6f136b54-2cb5-42ef-9def-f69caaba57ef HTTP/1.1" 200 - "-" "-" 
10.193.80.147 - - [21/Jan/2017:14:07:35 +0000] "GET /timer?id=e7963c53603ed9249b0aa557d8a64cea89fb0bf4:6f136b54-2cb5-42ef-9def-f69caaba57ef HTTP/1.1" 200 - "-" "-" 
10.193.80.150 - - [21/Jan/2017:14:07:35 +0000] "GET /timer?id=4b750805193fb4d00c3ce1465c266ed932a24e55:6f136b54-2cb5-42ef-9def-f69caaba57ef HTTP/1.1" 200 - "-" "-" 
[2017-01-21 14:07:37 +0000] [26657] [DEBUG] GET /timer 
[2017-01-21 14:07:37 +0000] [26657] [DEBUG] GET /timer 
[2017-01-21 14:07:37 +0000] [26635] [CRITICAL] WORKER TIMEOUT (pid:27202) 
[2017-01-21 14:07:37 +0000] [26635] [CRITICAL] WORKER TIMEOUT (pid:27205) 

То, что я заметил, было лишь несколько рабочих всегда делают работу 26657, 2665226651 все остальное только кажется, дает мне Worker timeout

ответ

0

You у вас есть некоторые просьбы, которые занимают больше 30 секунд, чтобы закончить, вот почему они убиты. Либо:

  • настроить свой код так, чтобы каждый запрос делается в течение менее чем за 30 секунд (что также может быть из-за медленной базу данных или другие зависимости)
  • проверить, если ваш хост короток на ресурсах, это может быть вызвано к процессору или ОЗУ. Настройка вашей машины путем добавления большего количества оперативной памяти в машину помогает только в том случае, если каждый из ваших единорогов обрабатывает много ОЗУ и машина начинает заменять. Попробуйте, например. top, чтобы проверить, насыщены ли CPU или ОЗУ.
  • увеличить таймаут, изменив --timeout 30 на большее количество. На самом деле это худшая идея, так как вы не решаете свою основную проблему, так как ваше приложение-фляга медленно реагирует на входящие запросы. Плюс убийство длительных запросов часто помогает другим потокам фляг не запускать проблемы с ресурсами.
+0

Благодарим за быстрый ответ. Я попытаюсь увеличить тайм-аут, там может быть тонкая настройка кода, который я мог бы сделать. Поскольку на этом конкретном сервере только попадают конечные точки, которые общаются с kafka, и мои настройки могут мешать мне закончить вовремя. Я увеличиваю время ожидания, хотя думаю, что я видел ту же проблему с тайм-аутом '100'. Код не должен занять столько времени, чтобы запустить, конечная точка вызывается, и я помещаю сообщение в тему kafka, и это все. Он не должен быть ресурсоемким или трудоемким –

+0

, безусловно, есть некоторые темы, которые занимают очень много времени. Вы заглянули в флеш-файлы? Разве эти убитые нити не зарегистрированы? – hansaplast

+0

Я не вижу никаких стеков, только тайм-аутов. Я обновил свой вопрос с помощью некоторого образца из журналов –