質問: 次のコマンドでpm2を起動しています。pm2 start process.config.js --node-args="--max_new_space_size=4096 --max_executable_size=4096 --max_old_space_size=4096" そして、process.config.jsには、この形式の約100のプロセスがあります。 { "services": [ { "name": "a", "language": "nodejs", "replicas": 1, "script": "./a/index.js", "log_type": "json", "exec_mode": "fork", "max_memory_restart": "500m", "env_production": { "node_env": "production", "service": "a" } }, { "name": "b", "language": "nodejs", "replicas": 1, "script": "./b/index.js", "log_type": "json", "exec_mode": "fork", "max_memory_restart": "500m", "env_production": { "node_env": "production", "service": "b" } } ] } 古いバージョンのpm2には問題はなく、数日経っても停止することはありませんが、pm2 3.5.1では10〜15分しか実行されません。
回答: pm2はvizionを使用し、js-gitの依存関係は大きなgitリポジトリでは正しく機能しません。モジュールがjs-gitソースに.git/objects/packを読み込もうとしていることがわかります。 function loadindex() { var indexfile = pathjoin(packdir, "pack-" + packhash + ".idx" ); fs.readfile(indexfile, function (err, buffer) { if (!buffer) return callback(err); try { cachedindexes[packhash] = parseindex(buffer); } catch (err) { return callback(err); } onindex(); }); } 巨大なgitリポジトリがある場合は、ここでoomを取得するのは簡単です。そのような機能が必要ない場合は、vizionを無効にすることができます(デフォルトではtrueです)。 http://pm2.keymetrics.io/docs/usage/application-declaration/