使用MailjetApi发送5000封邮件时出现NodeJS堆内存溢出错误
使用Mailjet API发送5000封邮件时触发JavaScript堆内存溢出错误
我的代码实现
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); }); } }
错误信息
<--- 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) allocation failure scavenge might not succeed [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 memory
应用启动配置
PM2启动命令
sudo pm2 start process.json --node-args="--max-old-space-size=4096"
PM2的process.json配置
{ "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"
服务器配置
- CPU:Intel Xeon E5-2630L v2 @ 2.40GHz × 8核
- 内存:16GB
- 磁盘:40GB SSD
内容的提问来源于stack exchange,提问作者tonymx227
相关产品推荐
相关产品推荐

