NodeJs内存泄漏已检测
概述:我正在使用Puppeteer软件包从电子邮件地址中抓取数据。我在遍历所有的值messages
并截取屏幕截图并将其保存在S3存储桶中。
messages
列表永远不会少于50,一旦执行脚本,它就会经过大约10左右,然后崩溃:MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added. Use emitter.setMaxListeners() to increase limit
我已经发现并且不厌倦的可能解决方法正在增加MaxListeners,但这不能解决问题。我已经阅读了有关使用Queues的一些知识,任何人都对如何解决这个问题有一个想法?我将在下面发布代码和跟踪堆栈。
return connection.search(searchCriteria, fetchOptions).then(function (messages) {
for (let index = 0; index < messages.length; index++) {
console.log(index)
let item = messages[index]
var all = _.find(item.parts, { "which": "" })
var id = item.attributes.uid;
var idHeader = "Imap-Id: "+id+"\r\n";
simpleParser(idHeader + all.body, (err, mail) => {
let competitor = stub.find(function (el) {
return mail.from.value[0].address.match(new RegExp(el.mailFromFilter, 'gi'));
});
if (typeof competitor == 'undefined') {
return 0;
}
(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
let newsLetterId = ''
await axios.post('',
{
competitor: "/api/competitors/"+competitor.id,
subject: mail.subject
}
).then((response) => {
newsLetterId = response.data.id
})
.catch(function (error) {
console.log(error);
});
page.setViewport(config.viewport);
axios({
method: 'put',
url: '/' + competitor.id,
data: { lastNewsletterSnapshot: formatted}
});
let currentFile = await page.screenshot({
fullPage: true,
encoding: 'binary'
});
let params = {
ACL: 'public-read'
}
await storage.put(configS3.directory + competitor.id + '/newsletters/'+newsLetterId+'_' +today.split('T')[0] + '.png', currentFile, params)
await browser.close();
})();
// });
});
};
connection.end();
});
堆栈:
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) UnhandledPromiseRejectionWarning: TimeoutError: waiting for target failed: timeout 30000ms exceeded
at Function.waitWithTimeout (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:215:26)
at Browser.waitForTarget (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Browser.js:214:27)
at Browser.<anonymous> (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:112:23)
at Launcher.launch (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Launcher.js:185:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:59092) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:59092) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:59092) UnhandledPromiseRejectionWarning: TimeoutError: waiting for target failed: timeout 30000ms exceeded
at Function.waitWithTimeout (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:215:26)
at Browser.waitForTarget (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Browser.js:214:27)
at Browser.<anonymous> (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:112:23)
at Launcher.launch (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Launcher.js:185:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:59092) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
```
回答如下:很难确定根本原因所在的代码段和原因。我建议您分析代码以了解发生了什么。
A。 Clinicjs
B。 Flame-graph
希望这会有所帮助!
NodeJs内存泄漏已检测
概述:我正在使用Puppeteer软件包从电子邮件地址中抓取数据。我在遍历所有的值messages
并截取屏幕截图并将其保存在S3存储桶中。
messages
列表永远不会少于50,一旦执行脚本,它就会经过大约10左右,然后崩溃:MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added. Use emitter.setMaxListeners() to increase limit
我已经发现并且不厌倦的可能解决方法正在增加MaxListeners,但这不能解决问题。我已经阅读了有关使用Queues的一些知识,任何人都对如何解决这个问题有一个想法?我将在下面发布代码和跟踪堆栈。
return connection.search(searchCriteria, fetchOptions).then(function (messages) {
for (let index = 0; index < messages.length; index++) {
console.log(index)
let item = messages[index]
var all = _.find(item.parts, { "which": "" })
var id = item.attributes.uid;
var idHeader = "Imap-Id: "+id+"\r\n";
simpleParser(idHeader + all.body, (err, mail) => {
let competitor = stub.find(function (el) {
return mail.from.value[0].address.match(new RegExp(el.mailFromFilter, 'gi'));
});
if (typeof competitor == 'undefined') {
return 0;
}
(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
let newsLetterId = ''
await axios.post('',
{
competitor: "/api/competitors/"+competitor.id,
subject: mail.subject
}
).then((response) => {
newsLetterId = response.data.id
})
.catch(function (error) {
console.log(error);
});
page.setViewport(config.viewport);
axios({
method: 'put',
url: '/' + competitor.id,
data: { lastNewsletterSnapshot: formatted}
});
let currentFile = await page.screenshot({
fullPage: true,
encoding: 'binary'
});
let params = {
ACL: 'public-read'
}
await storage.put(configS3.directory + competitor.id + '/newsletters/'+newsLetterId+'_' +today.split('T')[0] + '.png', currentFile, params)
await browser.close();
})();
// });
});
};
connection.end();
});
堆栈:
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit
(node:59092) UnhandledPromiseRejectionWarning: TimeoutError: waiting for target failed: timeout 30000ms exceeded
at Function.waitWithTimeout (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:215:26)
at Browser.waitForTarget (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Browser.js:214:27)
at Browser.<anonymous> (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:112:23)
at Launcher.launch (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Launcher.js:185:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:59092) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:59092) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:59092) UnhandledPromiseRejectionWarning: TimeoutError: waiting for target failed: timeout 30000ms exceeded
at Function.waitWithTimeout (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:215:26)
at Browser.waitForTarget (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Browser.js:214:27)
at Browser.<anonymous> (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\helper.js:112:23)
at Launcher.launch (C:\bifrost\odin\muninn\node_modules\puppeteer\lib\Launcher.js:185:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:59092) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
```
回答如下:很难确定根本原因所在的代码段和原因。我建议您分析代码以了解发生了什么。
A。 Clinicjs
B。 Flame-graph
希望这会有所帮助!