2017-10-21 12 views
0

私はgungornを使用しています。19.7.1 Djangoプロジェクト(Ubuntu 14.04マシン)用のnginxリバースプロキシを備えたappserver。何千もの無関係なgunicornワーカー

ps aux | grep gunicorn | grep -v grep | wc -l今のところが得られます。

/etc/init/gunicorn.confでは、私はいつも-w 33を持っていました。しかし、私がsudo service gunicorn stopsudo service gunicorn startを行っても、余分な労働者は存続します。

どうすれば外来労働者を殺すことができますか?


これはどうでしたか?

作業台数33は、忙しい運用システムでは常に正しく設定されています。

しかし、数時間前、私はサーバー上でpythonのmultiprocessingを試していました。 Gunicornの労働者はすべての記憶を食べて、住人の赤ちゃんのインスタンスも取り出しました。

enter image description here

私は、変更を元に戻すと、メモリが解放されていないと私はこれらのレガシーgunicornの労働者に対処しなければならなかった以外は、オンラインのすべてを取り戻すために管理しています。どうしたの?

答えて

1

sudo service gunicorn stopsudo service gunicorn startを実行してもこれらの余分な労働者は存続します。

serviceservice -initiatedプロセスを管理しますので、あなたは、サービスフレームワークの外Gunicornの労働者を開始した場合、これらの労働者は、たとえあなたstopを生きていきます。

どのように外来労働者を殺すのですか?

高速な方法:

を実行し、このコマンドは、すべてのgunicornプロセスIDを一覧表示し、それらを終了し、その後、再起動するGunicorn:

$ pkill gunicorn 
$ sudo service gunicorn start 

良い方法:

  1. Id親を見つけることによってあなたの "希望"のGunicorn労働者を募集してください:

    親プロセス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 
    
+0

だから私はより良い方法を選んだ - それは私に外科的に見えた。 '/ tmp'に目的のファイルを作成しました。結局、私が 'cat wanted_workers all_workers |並べ替え|ユニーク-u | xargs殺す '、何も起こらなかった。具体的には、 'ps aux |グレープガンコーン| grep -v grep | wc -l'はまだ私に3043 **を与え、メモリも解放されていません。何か案は? –

+0

@HassanBaigあなたはプロセスのオーナーですか?もしそうでなければ、 'kill'の代わりに' sudo kill'する必要があります。 –

+0

さて、私は実際に 'root'と' cat 'の両方としてこのことを試しましたdesired_workers all_workers |並べ替え|ユニーク-u | xargsはsudoをkillします。どちらの方法もこれらのプロセスを殺しませんでした。私はまだ** 3043 **を参照してください。多分、別のアプローチをここに適用するべきでしょうか? –

関連する問題