殺死 Ubuntu 伺服器上的數千個無關程序
我正在為 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 stop
並sudo service gunicorn start
沒有奏效。接下來,我被推薦了兩種殺死無關工人的方法。我試過了——他們也沒有成功。基本上當我嘗試它們時,什麼都沒有發生。
這是第一種方法:
pid
1)通過獲取 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 gunicorn
andsudo pkill gunicorn
。兩種情況都沒有發生。我還能在這裡做什麼?無關的獨角獸工人是如何產生的?
在我繁忙的生產系統上,工人數量
33
一直是正確配置的。然而幾個小時前,我在伺服器上嘗試了 python 的多處理,但事情卻向南了。Gunicorn 工作人員吃掉了所有的記憶體並取出了常駐的 redis 實例。
我恢復了更改並設法使所有內容重新上線,除了記憶體尚未釋放並且我不得不應對這些遺留的 gunicorn 工人。這是怎麼回事?
您應該嘗試使用 kill 發送不同的信號。預設是
TERM
,你可以嘗試INT
,如果這不起作用KILL
,例如cat desired_workers all_workers | sort | uniq -u | xargs kill -INT
無關的獨角獸工人是如何產生的?
你在做的事情
我在伺服器上嘗試了 python 的多處理,但事情卻向南了。
你真的不應該對你的生產系統進行這種研究。測試系統很容易啟動,並且比您花費(不)修復事物的時間要少得多。