私は node.js に比較的慣れていないので、単純なメッセージ キュー アプリを作成する任務を負っています。基本的に、アプリはメッセージ データとクライアントの MAC アドレスを含むポストを受け取り、それをデコードしてからsqlite データベース、別のプロセスによって後で投稿されます。
すべて正常に動作しますが、メモリ リークの可能性があります。memwatch モジュールを使用して、リークを受信投稿を処理するコードに絞り込みました。これを以下に示します。
app.route('*')
.post(function(req, res){
var mac = decodeURI(unescape(req.param('mac').replace(/\+/g, "%20")));
var data = decodeURI(unescape(req.param('data').replace(/\+/g, "%20")));
req = null;
db.run("INSERT INTO queue (mac, data) VALUES (?,?)", [mac, data], function(er){
if(er) {
res.writeHead(500, "Insert to queue failed", {'Content-Type': 'text/html'});
res.end();
} else {
res.writeHead(200, "OK", {'Content-Type': 'text/html'});
res.end();
}
res = null;
mac = null;
data = null;
});
})
ここで間違っていると思われるものを見つけることはできませんが、アプリに 10000 件のリクエストを送信すると、ほとんどの場合、memwatch でメモリ リーク イベントが発生します。私はここで正しい方向へのナッジを探しています:私たちは単に memwatch を誤解していますか、それとも私が何らかの形で見逃しているリークがありますか? 私が理解しているように、memwatch は 5 回以上の V8 ガベージ コレクションの試行が連続して行われるヒープの増加をリークと見なします。決定的な答えであり、それを除外する必要があります。正しい方向に私を向けただけでも、どんな助けでも大歓迎です!