Matando milhares de processos estranhos no servidor Ubuntu

1

Estou usando o gunicorn 19.7.1 appserver com nginx reverse proxy para um projeto Django (máquina Ubuntu 14.04).

ps aux | grep gunicorn | grep -v grep | wc -l produz 3043 no momento.

Considerando que em /etc/init/gunicorn.conf , sempre tive -w 33 . No entanto, esses trabalhadores extras persistem mesmo se eu usar sudo service gunicorn stop e sudo service gunicorn start .

Como eu mato os trabalhadores estranhos?

O que eu tentei:

sudo service gunicorn stop e sudo service gunicorn start não funcionaram.

Em seguida, tenho recomendado duas maneiras de matar trabalhadores estranhos. Eu tentei eles - eles não tiveram sucesso também. Basicamente, quando eu testo, nada acontece.

Aqui está a primeira maneira:

1) Obtenha o gunicorn pid via sudo service gunicorn status

2) Salve todos os trabalhadores 'desejados' que não serão mortos:

echo 123 > desired_workers
pgrep -P 123 >> desired_workers

3) Agora, obtenha todos os trabalhadores de gúnis em todo o mundo:

pgrep gunicorn > all_workers

4) Por último, simplesmente faça:

cat desired_workers all_workers | sort | uniq -u | xargs kill

O acima não funcionou. Da mesma forma, fazer cat desired_workers all_workers | sort | uniq -u | xargs sudo kill também não funcionou. Nem tente isso como root .

Em seguida, eu simplesmente tentei pkill gunicorn e sudo pkill gunicorn . Nada aconteceu em nenhum dos casos. O que mais posso fazer aqui?

Como foram criados os trabalhadores externos de gúnus?

A contagem de trabalhadores de 33 sempre foi configurada corretamente no meu sistema de produção ocupado.

No entanto, algumas horas atrás, eu estava tentando multiprocessamento do python no servidor e as coisas foram para o sul. Trabalhadores de Gunicorn devoraram toda a memória e também tiraram os exemplos de redis residentes.

Eu reverti a mudança e consegui colocar tudo de volta on-line, exceto que a memória não foi liberada e tive que lidar com esses legados de trabalhadores de gúnis. O que está acontecendo?

    
por Hassan Baig 23.10.2017 / 04:19

1 resposta

1

Você deve tentar enviar um sinal diferente com kill. O padrão é TERM , você pode tentar INT e, se isso não funcionar, KILL , por exemplo,

cat desired_workers all_workers | sort | uniq -u | xargs kill -INT

How were extraneous gunicorn workers created?

Algo que você fez enquanto

I was trying python's multiprocessing on the server and things went south.

Você realmente não deve fazer esse tipo de pesquisa em seus sistemas de produção. Os sistemas de teste são fáceis de girar e const muito menores do que o tempo que você gastou (não) consertando as coisas.

    
por 23.10.2017 / 08:18