i've wrote websocket module in node.js. running under debian jessie on vm in google cloud. runs service via pm2. service gets request, sends response , sends data aws sqs(query service).
i have custom class sending messages queue, , has memory leak in it:
var aws = require("aws-sdk"); var logger = require("./logger"); aws.config.loadfrompath("/home/admin/.aws/cred.json"); function queueservice() { this.sqs = new aws.sqs(); this.queue = "https://sqs.eu-central-1.amazonaws.com/4864251684/myqueue"; } queueservice.prototype.senditemtostatistics = function (message, reqjson, wsconnection, queue) { try { logger.log("silly", "queueurl", queue) this.sqs.sendmessage({ messagebody: message, queueurl: queue, delayseconds: 0 }, function (err, data) { if (err) logger.log("error", "error, while sending report statistics:", err.stack) else logger.log("debug", "submitted sqs") }); } catch (e) { logger.log("error", "failed send statistics report, stacktrace:", e.stack) } } module.exports = new queueservice();
this problematic part - sending items queue:
this.sqs.sendmessage({ messagebody: message, queueurl: queue, delayseconds: 0 }, function (err, data) { if (err) logger.log("error", "error, while sending report statistics:", err.stack) else logger.log("debug", "submitted sqs") });
with ~100 rps, service ram gets bloated ~900mb in 4-5 minutes. kill , respawn process keep responsive. if comment out, memory leak stops, service stays @ around 60-70 mb ram under same conditions.
i assume sdk fine , there wrong implementation. didn't find particular info on issue.
anyone experienced this?
as usual, find answear minutes later: add this:
require('http').globalagent.maxsockets = require('https').globalagent.maxsockets = 100
at first line, before rest of code. forces node rehash used sockets.
it turns out default value maxsockets unlimited, keeps opening new sockets instead of reusing old ones.
as suggested mhart
here
The above information is very useful to us, Keep update with more information regarding AWS AWS Online Training
ReplyDelete