Я написал веб-модуль в Node.js. Запуск его в Debian Jessie на виртуальной машине в облаке Google. Он работает как услуга через PM2. Служба получает запрос, отправляет ответ, а также отправляет некоторые данные в службу AWS SQS (службу запросов).Уязвимость памяти Node.js AWS-SDK SQS
У меня есть пользовательский класс для отправки сообщений в очереди, и она имеет место утечка памяти в нем:
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 to statistics:", err.stack)
else logger.log("debug", "Submitted to SQS")
});
} catch (e) {
logger.log("error", "Failed to send a statistics report, stacktrace:", e.stack)
}
}
module.exports = new QueueService();
Это проблематичная часть - отправка элементов в очереди:
this.sqs.sendMessage({
MessageBody: message,
QueueUrl: queue,
DelaySeconds: 0
},
function (err, data) {
if (err) logger.log("error", "Error, while sending report to statistics:", err.stack)
else logger.log("debug", "Submitted to SQS")
});
С ~ 100 RPS служебная RAM раздувается до ~ 900 мб примерно через 4-5 минут. Затем я убиваю и воспитываю процесс, чтобы он реагировал. Если я прокомментирую это, утечка памяти прекратится, то при тех же условиях обслуживание останется на уровне 60-70 мб оперативной памяти.
Я предполагаю, что SDK в порядке и что-то не так с моей реализацией. Не нашел никакой конкретной информации по этой проблеме.
Кто-нибудь испытал это?