2016-07-04 7 views
1

私のnodejsアプリケーションは要求を受け入れるまでに時間がかかります(リソースのコンパイルなど)。pm2のクラスタプロセスから「オンライン」イベントを遅延させる方法はありますか?

pm2でクラスタモードで実行し、リロードをトリガすると、pm2はインスタンスを1つずつリロードすることを開始しますが、アプリケーションが実際にリクエストを受け入れてから別のインスタンスを再開するまで待機しません。すべてのインスタンスがしばらくダウンしてしまいます。

pm2ソースを調べると、ワーカープロセスからの「オンライン」イベントを待っているようで、そのイベントは早すぎます。

通常のリロードを行うためにこのオンラインイベントを遅らせる方法はありますか? pm2 start app -i 2

var http = require("http"); 

setTimeout(() => { 
    var server = http.createServer((req, res) => { 
    res.statusCode = 200; 
    res.setHeader("Content-Type", "text/plain"); 
    res.end("hello\n"); 
    }); 

    server.listen(7000, "127.0.0.1",() => { 
    console.log("server ready"); 
    }); 
}, 10000); 

スタート、その後、pm2 reload appでリロードしてみてください。

は、ここでのテストケースです。アプリは全く要求に応答しないとき、私のマシン上で は約4秒のウィンドウがあります:

curl: (7) Failed to connect to localhost port 7000: Connection refused 

(アプリはwatch curl -sS localhost:7000とオンラインであれば、あなたが便利に監視することができます)

答えて

1

増やすGRACEFUL_LISTEN_TIMEOUT値は、問題を修正します - デフォルトでは、3秒に設定されています。つまり、pm2はあまりにも早く諦めて、次のインスタンスに進みます。

PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update 

次のような値を変更することができます

関連する問題