我正在使用 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)pid
通过以下方式获取 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
和sudo pkill gunicorn
。两种情况都没有发生。我还能做什么?
多余的 gunicorn 工作者是如何创建的?
在我繁忙的生产系统上,工人数量33
始终被正确配置。
然而几个小时前,我在服务器上尝试 python 的多处理时,出现了问题。Gunicorn 工作进程耗尽了所有内存,还破坏了常驻的 redis 实例。
我恢复了更改并设法使一切恢复正常,但内存尚未释放,而且我不得不应对这些遗留的 gunicorn 工作者。发生了什么事?
答案1
您应该尝试使用 kill 发送不同的信号。默认是TERM
,您可以尝试INT
,如果不起作用KILL
,例如
cat desired_workers all_workers | sort | uniq -u | xargs kill -INT
多余的 gunicorn 工作者是如何创建的?
你做过的一些事
我正在服务器上尝试 python 的多处理,但事情出了问题。
您真的不应该在生产系统上进行这种研究。测试系统很容易启动,而且比您花在(不)修复问题上的时间要少得多。