I get an error when sending 5K of emails using the MailjetApi.
My code :
function arraySend(array, locals) {
var mailjetConnect = mailjet.connect(locals.blocks.mailjetparam.username, locals.blocks.mailjetparam.password),
chunkedArrayMessages = _.chunk(array, 50),
delay = ms => new Promise(resolve => setTimeout(resolve, ms)),
promises;
if (process.env.NODE_ENV.trim() === 'dev') {
return Promise.resolve();
} else {
promises = chunkedArrayMessages.map((messages) => {
return Promise.all([
delay(1000),
mailjetConnect.post('send', { version: 'v3.1' }).request({ Messages: messages }).then(() => {
return Promise.resolve();
}).catch(() => {
return Promise.resolve();
})
]);
});
return Promise.all(promises).then(function() {
return Promise.resolve();
}).catch(function(err) {
return Promise.reject(err);
});
}
}
Errors :
<--- Last few GCs --->
[30337:0x51226d0] 59607 ms: Mark-sweep (reduce) 4085.3 (4103.8) -> 4085.1 (4107.6) MB, 71.7 / 0.1 ms (+ 79.5 ms in 40 steps since start of marking, biggest step 78.8 ms, walltime since start of marking 255 ms) (average mu = 0.852, current mu = 0.779) [30337:0x51226d0] 59810 ms: Mark-sweep (reduce) 4087.0 (4108.0) -> 4086.9 (4109.0) MB, 119.3 / 0.1 ms (average mu = 0.781, current mu = 0.411) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memor
My NodeJS application is started using PM2 and process.json
.
Command that I use to start my NodeJS application : sudo pm2 start process.json --node-args="--max-old-space-size=4096"
My process.json of PM2 :
{apps:[{name:"*****.fr:3006",cwd: "****/mywebsite/cms",script: "./index.js",watch:false, env: {"NODE_ENV": "prod"}}]}
Package.json :
"start": "set NODE_ENV=prod & node index.js",
My server :