node.js に以下のコードがあります。長時間実行されるバックグラウンド サービスであり、
- status = 0 のメッセージ テーブルをスキャンします
- そこから日付を読み取ります
- Amazon SES を使用して E メールを送信します
- メッセージ テーブルのステータスを 1 に更新します。
私のMacでこれを実行すると、メモリ使用量は30M未満でかなり一定ですが、CENTOSサーバーでこれを実行すると、メモリ消費量が増加し続けます。私はnode.jsにかなり慣れていません。誰かが私を導くことができますか?これは再帰のためですか?
var nodemailer = require('../lib/nodemailer'),
fs = require("fs"),
pathlib = require("path");
var mysql = require("mysql");
// Create an Amazon SES transport object
var transport = nodemailer.createTransport("SES", {
AWSAccessKeyID: "xxxxxxx",
AWSSecretKey: "yyyyyyyyy",
ServiceUrl: "https://email.us-east-1.amazonaws.com" // optional
});
console.log('SES Configured');
var connection = mysql.createConnection({
user: "user",
password: "xxxxxx",
database: "db_content"
});
// Message object
function loop(){
console.log("Reading from DB");
connection.query('SELECT * FROM mm_messages where status = 0 limit 1;', function (error, rows, fields) {
if( rows.length == 1 ) {
var message = {
from: 'abc <abc@xxxxx.com>',
to: rows[0]["to"],
subject: rows[0]["subject"] + rows[0]["id"], //
text: 'Hello to myself!',
html:'<p><b>Hello</b> to myself <img src="cid:note@node"/></p>'
};
console.log('Sending Mail');
transport.sendMail(message, function(error){
if(error){
console.log('Error occured');
console.log(error.message);
//return;
}
console.log('Message sent successfully!');
connection.query('update mm_messages set status = 1 where id='+rows[0]["id"] + ';', function (errorq, rowsq, fieldsq) {
message = null;
error = null;
errorq = null;
rowsq = null;
rows = null;
fieldsq = null;
fields = null;
setTimeout(loop, 2000);
});
});
} else {
message = null;
rows = null;
fields =null;
error= null;
setTimeout(loop, 2000);
}
});
}
loop();