subscribe to redis を使用してメッセージを受信し、接続されたクライアントに送信するかなり単純な Node.JS アプリケーションがあります。さらに、サブスクライブ メソッドを使用して Node.JS にコマンドを渡し、ユーザーにメールを送信します。
すべて正常に動作しますが、メモリ使用量が 1.1GB に達するまで毎日増加し (Linux でコマンド top を使用)、それ以降のすべての電子メール送信はエラー メッセージで失敗します。
{ [Error: spawn ENOMEM] code: 'ENOMEM', errno: 'ENOMEM', syscall: 'spawn' }
それはどこから来たのでしょうか?ソース コードはかなり単純です。
接続しているクライアント:
io.sockets.on('connection', function (socket) {
nClients++;
console.log("Number of clients connected " + nClients);
socket.on('disconnect', function () {
nClients--;
console.log("Number of clients remaining " + nClients);
});
});
クライアントに送信するメッセージの受信
cli_sub.on("message",function(channel,message) {
if(nUseDelay==1) {
oo = JSON.parse(message);
ablv_last_message[oo[0]["base"]+"_"+oo[0]["alt"]] = message;
} else {
io.sockets.emit('ablv', message);
}
});
クライアントへの電子メールの送信
cli_email.on("message",function(channel,message) {
var transport = nodemailer.createTransport("sendmail");
oo = JSON.parse(message);
var mailOptions = {
from: email_sender,
bcc: oo["bcc"],
to: oo["recipient"],
subject: oo["subject"],
html: oo["text"]
}
try {
transport.sendMail(mailOptions);
} catch(err) {
console.log(err);
}
});
setInterval(function() {
Object.keys(ablv_last_message).forEach( function(key) {
io.sockets.emit('ablv', ablv_last_message[key]);
});
ask_last_message = [];
}, 5000);