Linux

殺死 Ubuntu 伺服器上的數千個無關程序

  • October 23, 2017

我正在為 Django 項目(Ubuntu 14.04 機器)使用帶有 nginx 反向代理的 gunicorn 19.7.1 appserver。

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 stopsudo service gunicorn start沒有奏效。

接下來,我被推薦了兩種殺死無關工人的方法。我試過了——他們也沒有成功。基本上當我嘗試它們時,什麼都沒有發生。

這是第一種方法:

pid1)通過獲取 gunicornsudo service gunicorn status

2)保存所有不會被殺死的“期望”工人:

echo 123 > desired_workers
pgrep -P 123 >> desired_workers

3)現在讓所有gunicorn工人在全球範圍內:

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 gunicornand sudo pkill gunicorn。兩種情況都沒有發生。我還能在這裡做什麼?


無關的獨角獸工人是如何產生的?

在我繁忙的生產系統上,工人數量33一直是正確配置的。

然而幾個小時前,我在伺服器上嘗試了 python 的多處理,但事情卻向南了。Gunicorn 工作人員吃掉了所有的記憶體並取出了常駐的 redis 實例。

我恢復了更改並設法使所有內容重新上線,除了記憶體尚未釋放並且我不得不應對這些遺留的 gunicorn 工人。這是怎麼回事?

您應該嘗試使用 kill 發送不同的信號。預設是TERM,你可以嘗試INT,如果這不起作用KILL,例如

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

無關的獨角獸工人是如何產生的?

你在做的事情

我在伺服器上嘗試了 python 的多處理,但事情卻向南了。

你真的不應該對你的生產系統進行這種研究。測試系統很容易啟動,並且比您花費(不)修復事物的時間要少得多。

引用自:https://serverfault.com/questions/879745