Como posso usar o Emperor uWSGI para limitar recursos a um determinado valor para todos os aplicativos (em vez de por cada um)

1

Eu tenho um aplicativo Django para o qual eu quero limitar os recursos usados pelo uWSGI para 12288MB e processa (workers) para 6.

Com três aplicativos separados, posso limitar cada um a dois trabalhadores e cada trabalhador a 2048 MB de memória ( limit-as ), mas prefiro permitir que todos os três aplicativos compartilhem a mesma quantidade de recursos (todos eles relacionado, e 1 não é mais importante do que o outro - eles são apenas aplicativos separados, porque cada um usa configurações do Python). Eu não quero um aplicativo para bater, enquanto os outros 2 estão tomando Mai Tais na praia com 1,5 GB de RAM por aí e processador para pegar.

Meu uWSGI conf tem esta aparência:

--emperor /etc/uwsgi/apps-enabled
--disable-logging
--die-on-term
--master
--uid www-data
--gid www-data
--logto /var/log/uwsgi/emperor.log

Cada aplicativo é semelhante a:

[uwsgi]
socket = /tmp/app-1.uwsgi.sock
workers = 2
threads = 40
limit-as = 2048
harakiri = 20
max-requests = 1600
plugins = python
module = myapp.wsgi
callable = application
venv = /var/www/myapp/deps/current/venv
chdir = /var/www/myapp/deps/current/repo/src
touch-reload = /var/www/myapp/uwsgi/reload
auto-procname = true
procname-prefix-spaced = myapp
vacuum = true
reload-mercy = 8

BTW (side-question), todas essas configurações são intercambiáveis? Tipo, posso adicionar configurações de um aplicativo ao principal uWSGI conf (aquelas que são as mesmas para todos os três aplicativos) e, da mesma forma, adicionar coisas como log-to a aplicativos específicos - não tinha certeza se todas as configurações eram intercambiáveis .

    
por orokusaki 07.12.2012 / 19:23

1 resposta

1

Eu sugiro strongmente que você use cgroups (somente Linux) para gerenciar esse tipo de isolamento.

remover limite-como

e adicione

cgroup = / cgroup / app1

cgroup-opt = memory.limit_in_bytes = 1067459584

Mais informações estão aqui:

link

a única "desvantagem" é que você precisa rodar o emperor como root, e setar uid e gid em cada vassal

    
por 07.12.2012 / 20:30