成千上万的外来枪手工人

时间:2017-10-21 00:30:48

标签: django ubuntu gunicorn

我正在使用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 stopsudo service gunicorn start,这些额外的工作人员仍然存在。

如何杀死无关的工人?

这是怎么发生的?

我忙碌的生产系统上始终正确配置了33的工作人员数量。

然而几个小时前,我在服务器上尝试了python的multiprocessing,事情就发生了变化。 Gunicorn工作人员吃掉所有内存并取出了驻留的redis实例。

enter image description here

我恢复了这一变化,并设法让所有东西重新上线,除了记忆尚未释放,我不得不应对这些传统的枪支工人。发生了什么事?

1 个答案:

答案 0 :(得分:1)

  

即使我sudo service gunicorn stopsudo service gunicorn start,这些额外的工作人员仍然存在。

service仅管理service - 已启动的流程,因此,如果您在服务框架之外启动了Gunicorn工作人员,即使您stop,这些工作人员仍会继续生活。

  

如何杀死无关的工人?

快捷方式:

运行此命令列出所有gunicorn进程ID并终止它们,然后重新启动Gunicorn:

$ pkill gunicorn
$ sudo service gunicorn start

更好的方法:

  1. 通过寻找父母来确定你所谓的“希望”的Gunicorn工人:

    $ sudo service gunicorn status
    

    请注意父进程ID。我们说它是123

  2. 保存所有“所需”工作人员PID的列表:

     $ echo 123 > desired_workers
     $ pgrep -P 123 >> desired_workers
    
  3. 保存所有工人PID的列表:

     $ pgrep gunicorn > all_workers
    
  4. 终止“不受欢迎的”工作人员:

     $ cat desired_workers all_workers | sort | uniq -u | xargs kill