Назад | Перейти на главную страницу

Убиваем тысячи посторонних процессов на сервере Ubuntu

Я использую сервер приложений gunicorn 19.7.1 с обратным прокси-сервером nginx для проекта Django (машина Ubuntu 14.04).

ps aux | grep gunicorn | grep -v grep | wc -l дает 3043 в данный момент.

Тогда как в /etc/init/gunicorn.conf, У меня всегда было -w 33. Тем не менее, эти лишние рабочие остаются, даже если я sudo service gunicorn stop и sudo service gunicorn start.

Как мне убить посторонних работников?


Что я пробовал:

sudo service gunicorn stop и sudo service gunicorn start не сработало.

Далее мне порекомендовали два способа убить посторонних работников. Пробовал - тоже безуспешно. В основном, когда я их пробую, ничего не происходит.

Вот способ первый:

1) Получите Gunicorn pid через sudo service gunicorn status

2) Сохраните всех «желаемых» рабочих, которых нельзя убить:

echo 123 > desired_workers
pgrep -P 123 >> desired_workers

3) Теперь получите всех рабочих-пулеметчиков по всему миру:

pgrep gunicorn > all_workers

4) Наконец, просто выполните:

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

Вышеуказанное не сработало. Точно так же cat desired_workers all_workers | sort | uniq -u | xargs sudo kill тоже не сработало. Не пробовать это как root.

Далее я просто попробовал pkill gunicorn и sudo pkill gunicorn. В обоих случаях ничего не произошло. Что еще я могу здесь сделать?


Как были созданы посторонние рабочие-пулеметчики?

Количество рабочих 33 всегда был правильно настроен в моей загруженной производственной системе.

Однако несколько часов назад я пробовал многопроцессорность python на сервере, и все пошло не так. Рабочие Gunicorn съели всю память и также удалили резидентные экземпляры Redis.

Я отменил изменение и смог вернуть все обратно в онлайн, за исключением того, что память не была освобождена, и мне пришлось справиться с этими устаревшими рабочими-пулеметами. В чем дело?

Вам следует попробовать отправить другой сигнал с помощью kill. По умолчанию TERMвы могли бы попробовать INT и если это не сработает KILL, например,

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

Как были созданы посторонние рабочие-пулеметчики?

Что-то, что вы сделали, пока

Я пробовал многопроцессорность python на сервере, и все пошло наперекосяк.

Вам действительно не следует проводить такого рода исследования своих производственных систем. Тестовые системы легко раскрутить, и они работают намного быстрее, чем время, которое вы потратили (не) на исправление вещей.