多出渲染进程,内存占满

yubo 1月前 152

客户win7环境,pc客户端启动时最初8个进程,3个renderer进程,过一段时间后,变成9个或者10个进程

多的是一个renderer进程,这个进程内存占用一直涨,涨到内存占用完为止,并且没有父进程id。

目前不知道怎么去排查这个问题

最新回复 (23)
  • yubo 1月前
    引用 2
    多出的这个进程杀掉,不影响使用
  • yubo 1月前
    引用 3
    上次测试时5台机器中一台出现这种情况,并且要等4到5个小时以上才会出现
  • x86 1月前
    引用 4
    请用直接用 demo 对比测试一下
  • x86 1月前
    引用 5

    还有几个问题:

    1. electron 版本是多少?
    2. 基于官方vue-pc-chat什么时候的代码二次开发的?项目wfc/proto目录下是否有proto_main.js文件
    3. 测试期间,主要进行哪些操作?

    另外,你可以在background.js里面加点日志确认下是不是有窗口未关闭:

    1. 找到createWindow方法,添加日志,表示创建窗口
    2. 在调用createWindow的地方,都加上关闭监听,并打印日志:
      let win = createWindow(...);
     // win.webContents.openDevTools();
     win.on('close', () => {
          // 打印日志
          ....
     });
    
  • HeavyRain 1月前
    引用 6
    每次打开一个新的窗口就会创建一个对应的renderer进程,当关闭时这个进程就应该会被关闭,请用5楼的方法验证是那个窗口关掉没有正常结束进程
  • yubo 28天前
    引用 7
    electron版本13.6.9
  • yubo 28天前
    引用 8
    基于官方版本vue-pc-chat 22-09-01
  • yubo 28天前
    引用 9
    项目wfc/proto目录下有proto_main.js
  • x86 28天前
    引用 10
    yubo 基于官方版本vue-pc-chat 22-09-01
    electron 22 是最后支持 windows 7 的版本,可以考虑升级到这个版本测试一下。

    13.6.9 的时候,我们也遇到过内存泄漏的问题
  • yubo 28天前
    引用 11
    当同时打开组合消息、历史消息、收藏组合消息、收藏文件窗口,然后点击tray中的退出
    程序不结束,留下了两个electron进程
    win.close回调函数中添加的日志控制台没有打印

    最新demo版本无此问题
  • yubo 28天前
    引用 12
    最新demo vue2分支也是用的electron13.6.9,没有这个问题
  • yubo 28天前
    引用 13
    升到了22.3.25,点击托盘退出时不能结束

    剩下两个进程
    electron.exe --type=crashpad-handler
    electron.exe dist_electron --disable-background-timer-throttling "" --disable-background-timer-throttling 
  • yubo 28天前
    引用 14
     app.exit(0); 改为 disconnectAndQuit(); 可以结束退出
    但是不知道disconnectAndQuit能不能确保每次都正确退出
  • x86 28天前
    引用 15
    yubo 升到了22.3.25,点击托盘退出时不能结束 剩下两个进程 electron.exe --type=crashpad-handler electron.exe dist_electron - ...
    你说的是,点击托盘退出整个应用?
  • yubo 28天前
    引用 16
    是的。
    点击托盘退出应用时调用app.exit  卡住
  • yubo 28天前
    引用 17
    当有窗口打开,点击托盘退出时,下面这个函数会报错,点击确定后可以退出。这时没有残留进程
    connectionStatus [ -2 ]
    (node:21368) UnhandledPromiseRejectionWarning: TypeError: Cannot read properties of null (reading 'webContents')
        at Function.eval (webpack:///./src/background.js?:608:20)
        at Object.showErrorBox (node:electron/js2c/browser_init:2:20723)
        at node:electron/js2c/browser_init:2:113505
        at process.processTicksAndRejections (node:internal/process/task_queues:96:5)
    (node:21368) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)


    function forwardWFCEventToSubWindow(wfcEvent, ...args) {
        console.log(wfcEvent,args)
        let windows = BrowserWindow.getAllWindows();
        windows.forEach((w) => {
            if (w) {
                // if(mainWindow)
                    if (w.webContents.getURL() === mainWindow.webContents.getURL()) {
                        return;
                    }
                  w.webContents.send("wfcEvent", wfcEvent, args);
            }
        });
    }
  • x86 28天前
    引用 18
    yubo 当有窗口打开,点击托盘退出时,下面这个函数会报错,点击确定后可以退出。这时没有残留进程 connectionStatus [ -2 ] (node:21368) UnhandledPromiseR ...
    我用 demo 测试了吗,没有复现,demo 上能复现吗?
  • yubo 28天前
    引用 19
    demo vue2分支最新版没有,不能复现
  • yubo 28天前
    引用 20
    demo上已经去掉了wfcevent


    x86-
    ed87a25
    浏览文件
    不再采用@electron/remote模块调用协议栈方法
    x86 提交于 2年前
    x86-
    792cc27
    浏览文件
    remove wfcEvent
  • x86 28天前
    引用 21
    yubo demo vue2分支最新版没有,不能复现
    那你参考我们的最新代码改一下试试呢
  • yubo 28天前
    引用 22
    改了一下这个时间可以退出了

    1秒改为了2秒 
    disconnect() {
            self.userId = '';
            proto.disconnect(0);


            //sleep 1 second wait disconnect with im server
            var now = new Date();
            var exitTime = now.getTime() + 2000;
            while (true) {
                now = new Date();
                if (now.getTime() > exitTime)
                    return;
            }
        }
  • yubo 28天前
    引用 23
    版本跟最新demo差的有点多,还没有合并
  • yubo 28天前
    引用 24
    proto.min.js
返回