我正在使用gunicorn 19.7.1 appserver和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
,这些额外的工作人员仍然存在。
如何杀死无关的工人?
这是怎么发生的?
我忙碌的生产系统上始终正确配置了33
的工作人员数量。
然而几个小时前,我在服务器上尝试了python的multiprocessing
,事情就发生了变化。 Gunicorn工作人员吃掉所有内存并取出了驻留的redis实例。
我恢复了这一变化,并设法让所有东西重新上线,除了记忆尚未释放,我不得不应对这些传统的枪支工人。发生了什么事?
答案 0 :(得分:1)
即使我
sudo service gunicorn stop
和sudo service gunicorn start
,这些额外的工作人员仍然存在。
service
仅管理service
- 已启动的流程,因此,如果您在服务框架之外启动了Gunicorn工作人员,即使您stop
,这些工作人员仍会继续生活。
如何杀死无关的工人?
快捷方式:
运行此命令列出所有gunicorn
进程ID并终止它们,然后重新启动Gunicorn:
$ pkill gunicorn
$ sudo service gunicorn start
更好的方法:
通过寻找父母来确定你所谓的“希望”的Gunicorn工人:
$ sudo service gunicorn status
请注意父进程ID。我们说它是123
。
保存所有“所需”工作人员PID的列表:
$ echo 123 > desired_workers
$ pgrep -P 123 >> desired_workers
保存所有工人PID的列表:
$ pgrep gunicorn > all_workers
终止“不受欢迎的”工作人员:
$ cat desired_workers all_workers | sort | uniq -u | xargs kill