首页 > 解决方案 > Chromium 本机内存增长(通过图像缓存?)

问题描述

我的单页 Web 应用程序在 Linux 上使用 Chromium 时遇到了内存泄漏情况。我的应用程序获取 html 标记并通过.innerHTML将其嵌入到主页中。远程 html 片段可能引用 jpgs 或 pngs。JS-heap 中不会发生内存泄漏。这可以在下表中看到。

A 列显示了由performance.memory.usedJSHeapSize报告的 JS 堆的大小。(我使用-enable-precise-memory-info参数运行 Chromium 以获得精确值。)

B 列显示了 Chromium 占用的内存总量,如顶部所示(仅采样了开始值和结束值)。

C 列显示了 /proc/meminfo 报告的 Linux 中“可用内存”的数量。

       A              B               C
01  1337628        234.5 MB        522964 KB
02  1372198                        499404 KB
03  1500304                        499864 KB
04  1568540                        485476 KB
05  1651320                        478048 KB
06  1718846                        489684 KB GC
07  1300169                        450240 KB
08  1394914                        475624 KB
09  1462320                        472540 KB
10  1516964                        471064 KB
11  1644589                        459604 KB GC
12  1287521                        441532 KB
13  1446901                        449220 KB
14  1580417                        436504 KB
15  1690518                        457488 KB
16  1772467                        444216 KB GC
17  1261924                        418896 KB
18  1329657                        439252 KB
19  1403951                        436028 KB
20  1498403                        434292 KB
21  1607942                        429272 KB GC
22  1298138                        403828 KB
23  1402844                        412368 KB
24  1498350                        412560 KB
25  1570854                        409912 KB
26  1639122                        419268 KB
27  1715667                        399460 KB GC
28  1327934                        379188 KB
29  1438188                        417764 KB
30  1499364                        401160 KB
31  1646557                        406020 KB
32  1720947                        402000 KB GC
33  1369626        283.3 MB        378324 KB

虽然在我的 33 步测试期间 JS 堆仅在 1.3 MB 和 1.8 MB 之间变化,但 Chromium 内存(如顶部所报告)增长了 48.8 MB(从 234.5 MB 到 283.3 MB)。根据 /proc/meminfo 的说法,“可用内存”甚至同时缩小了 145 MB(从 C 列的 522964 KB 到 378324 KB)。我假设 Chromium 占用了报告的 283.3 MB之外的大量缓存。请注意,我通过开发人员工具手动调用 GC 6 次。

在运行测试之前,我已经停止了所有不必要的服务并杀死了所有不需要的进程。没有其他代码在并行执行任何必要的工作。没有浏览器扩展,也没有其他打开的选项卡。

内存泄漏似乎在本机内存中,并且可能涉及正在显示的图像。他们似乎永远不会被释放。此问题似乎类似于1 (bugs.webkit.org)。我已经应用了此处列出的所有常用建议2。如果我继续运行应用程序,Chromium 占用的内存量将无限增长,直到一切都变得爬行或直到 Linux OOM 杀手来袭。我能做的一件事(在为时已晚之前)是将浏览器切换到不同的 URL。这将释放所有本机内存,然后我可以返回我的应用程序并继续使用全新的内存情况。但这不是一个真正的解决方案。

问:本机内存缓存能否以更加程序化的方式释放?

标签: google-chromechromium

解决方案


推荐阅读