You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Если в конфиге указать worker_processes auto; и запустить Angie в контейнере с выставленным лимитом на CPU, то этот лимит будет проигнорирован и запустится столько воркеров, сколько есть CPU в системе.
# Пример
~$ docker run -it --cpus=1 docker.angie.software/angie
... skipped ...
2024/11/01 16:47:03 [notice] 1#1: start worker processes
2024/11/01 16:47:03 [notice] 1#1: start worker process 20
2024/11/01 16:47:03 [notice] 1#1: start worker process 21
2024/11/01 16:47:03 [notice] 1#1: start worker process 22
2024/11/01 16:47:03 [notice] 1#1: start worker process 23
# Ожидалось, что запуститься один воркер, а запустилось четыре
В образе с Nginx существуют entrypoint скрипты которые, среди прочего, позволяют вычитать лимиты из Cgroups, внести изменения в конфиг перед запуском и соблюсти лимит:
# Посмотреть на скрипт можно так
~$ docker run -it nginx cat /docker-entrypoint.d/30-tune-worker-processes.sh
Если скопировать эти скрипты из образа c Nginx, подправить их под реалии Angie, подкинуть их в образ с Angie, то получиться выполнить этот же трюк и соблюсти лимит:
# Пример
# FYI чтобы скрипт запустился должна быть указана специальная переменная окружения
# ANGIE_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE с любым значением
~$ docker run -it -e ANGIE_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE=true --cpus=1 angie
... skipped ...
2024/11/01 16:56:54 [notice] 1#1: start worker processes
2024/11/01 16:56:54 [notice] 1#1: start worker process 72
# Ожидалось, что запуститься один воркер и запустился один воркер
Да, это рабочий костыль но у него есть существенное ограничение - если в контейнере будет файловая система доступная только для чтения этот трюк провернуть не получится. В общем это всё выглядит противоестественно...
Будет очень хорошо если Angie в момент запуска сначала проверит Cgroups на предмет лимита на CPU и если он есть, то запустит столько воркеров, сколько указано в лимите, а если нет, то запустит столько воркеров, сколько есть CPU в системе.
The text was updated successfully, but these errors were encountered:
Добрый день.
Да, было бы хорошо проверять количество доступных ядер в рамках самой программы, но, если фича не будет взята в разработку, то аналогичный костыль для докера мы сможем сделать в рамках вот этого запроса: #101
@karabanov , приветствую.
В рамках #101 предложили решение, заодно снабдив его определением cpu constraint контейнера.
Будем рады услышать ваши соображения.
Здравствуйте.
Если в конфиге указать
worker_processes auto;
и запустить Angie в контейнере с выставленным лимитом на CPU, то этот лимит будет проигнорирован и запустится столько воркеров, сколько есть CPU в системе.В образе с Nginx существуют entrypoint скрипты которые, среди прочего, позволяют вычитать лимиты из
Cgroups
, внести изменения в конфиг перед запуском и соблюсти лимит:Если скопировать эти скрипты из образа c Nginx, подправить их под реалии Angie, подкинуть их в образ с Angie, то получиться выполнить этот же трюк и соблюсти лимит:
Да, это рабочий костыль но у него есть существенное ограничение - если в контейнере будет файловая система доступная только для чтения этот трюк провернуть не получится. В общем это всё выглядит противоестественно...
Будет очень хорошо если Angie в момент запуска сначала проверит
Cgroups
на предмет лимита на CPU и если он есть, то запустит столько воркеров, сколько указано в лимите, а если нет, то запустит столько воркеров, сколько есть CPU в системе.The text was updated successfully, but these errors were encountered: