最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

NodeJs内存泄漏已检测

IT培训 admin 8浏览 0评论

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

希望这会有所帮助!

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论