Gunicorn: 19.9.0
Flask: 1.0.2
Python: 3.6.7
У нас есть несколько внутренних API-интерфейсов моделей данных сервера с несколькими тысячамиТреб. / сек.Недавно мы представили новый, и по какой-то причине, когда он обслуживается несколькими процессами (Gunicorn является нашим по умолчанию), он будет обрабатывать несколько сотен запросов и просто блокироваться.
Если я запускаю API как пустой файл без Gunicorn, все работает нормально:
app.run(ip, port=port, threaded=True)
Если я запускаю несколько процессов, он сразу после запуска блокируется:
app.run(ip, port=port, threaded=False, processes=2)
Если я использую Gunicorn с workers=1
, он тоже блокируется, вот конфиг:
preload_app = False
bind = "0.0.0.0:{}".format(8889)
workers = 1
debug = False
timeout = 120
Я закомментировал весь код в конечной точке, и это не повлияло на его блокировкувверх.Это похоже на конфликт с зависимостью, но у меня возникают проблемы с ее точным указанием.
Если я пытаюсь подключиться, используя strace
, пока он заблокирован, я получаю плотный цикл со следующим выводом намастер процесса Gunicorn:
strace: Process 4387 attached
select(4, [3], [], [], {tv_sec=0, tv_usec=832486}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
Любые предложения о том, куда идти или что попробовать на этом этапе?