我正在为 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
.然而,即使我这样做,这些额外的 worker 仍然存在 sudo service gunicorn stop
和 sudo service gunicorn start
.
我如何杀死无关的 worker ?
这怎么发生的? 33
的 worker 数一直在我繁忙的生产系统上正确配置。
然而几个小时前,我在尝试 python 的 multiprocessing
在服务器上,事情向南发展。 Gunicorn 工作人员吃掉了所有的内存并取出了常驻的 redis 实例。
我恢复了更改并设法使所有内容重新上线,除了内存尚未释放并且我不得不应对这些遗留的 gunicorn worker 。这是怎么回事?
最佳答案
Yet these extra workers persist even if I do
sudo service gunicorn stop
andsudo service gunicorn start
.
service
只管理service
- 启动进程,因此如果您在服务框架之外启动 Gunicorn worker ,即使您 stop
,这些 worker 仍将继续存在。 .How do I kill the extraneous workers?
快捷方式:
运行此命令列出所有
gunicorn
进程 ID 并终止它们,然后重新启动 Gunicorn:$ pkill gunicorn
$ sudo service gunicorn start
更好的方法:
$ sudo service gunicorn status
记下父进程 ID。假设它是
123
. $ echo 123 > desired_workers
$ pgrep -P 123 >> desired_workers
$ pgrep gunicorn > all_workers
$ cat desired_workers all_workers | sort | uniq -u | xargs kill
关于django - 数以千计的外来 unicorn worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858963/