在 Ubuntu 服务器上终止数千个无关进程

在 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)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 gunicornsudo 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 的多处理,但事情出了问题。

您真的不应该在生产系统上进行这种研究。测试系统很容易启动,而且比您花在(不)修复问题上的时间要少得多。

相关内容