Gunicorn: multiprocessing.cpu_count() опасен в контейнерах

Созданный на 2 мая 2019  ·  4Комментарии  ·  Источник: benoitc/gunicorn

https://github.com/benoitc/gunicorn/blob/bd833e0009b8b07d13117f71534eb28e8dc24c5d/docs/source/configure.rst#L67

Из-за https://bugs.python.org/issue36054 рекомендации в этих документах опасны при работе внутри контейнера. Если вашему контейнеру было выделено (скажем) одно ядро ​​и 512 МБ ОЗУ на машине с 64 ядрами, multiprocessing.cpu_count() считает, что у него 64 ядра вместо 1, и в итоге вы порождаете 129 рабочих процессов. Это намного больше, чем у контейнера есть ресурсы, и в конечном итоге вызывает сбои из-за нехватки памяти.

Самый полезный комментарий

@twosigmajab хорошая идея! пожалуйста продолжай :)

Все 4 Комментарий

Привет 😄! Спасибо за уведомление.

По умолчанию в Gunicorn используется один воркер, даже если в документации есть пример определения числа. Учитывая, что в конечном итоге это, вероятно, будет исправлением ошибки Python, я не уверен, что нам следует что-то делать здесь конкретно. Тем не менее, размещение его ниже по течению в flask-gunicorn имеет большой смысл.

это скорее то, что должно быть исправлено в python, на самом деле это не проблема. Документация была сделана в то время, когда докера еще не существовало, но я думаю, что она все еще полезна для примера, поскольку она очень явная. Тогда закрывайте тему.

Добавление в документацию одной крошечной строчки («но остерегайтесь BPO-36054 при использовании контейнеров!») может избавить многих пользователей от головной боли на ~ лет, пока они будут использовать версии Python, в которых это не исправлено. Если вы не возражаете против слияния, я отправлю PR, если меня никто не опередит.

@twosigmajab хорошая идея! пожалуйста продолжай :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги