![内存泄漏?Firefox/Chromium 都占满了 RAM](https://linux22.com/image/1089536/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%EF%BC%9FFirefox%2FChromium%20%E9%83%BD%E5%8D%A0%E6%BB%A1%E4%BA%86%20RAM.png)
来自 linuxatemyram.com:
如果您的应用程序需要更多内存,它们只需收回磁盘缓存借用的一块内存即可。磁盘缓存始终可以立即归还给应用程序!您的内存并不短缺!
事实并非如此。某些东西正在消耗内存,并且不会归还。用例是 Chromium 或 Firefox 有很多标签,然后退出它们。浏览器运行前会占用更多的内存。
一些数字可以解释我的意思:
启动时:使用<2GB,通常~1.7GB。
在 FF/Chromium 中打开大量标签,最终占用超过 8GB
退出 FF/Chromium,已使用 3.5GB。
3.5-1.7=1.8GB 是多少?我们称之为 X。
X 是内存缓存吗?内存泄漏?为什么 Firefox 和 Chromium 都能重现完全相同的结果?
打开标签最终会完全占满我的 8GB RAM,系统冻结,然后标签最终死亡/冻结/崩溃,释放出足够的内存以继续运行。
我希望 Ubuntu 具有的正确功能是,当应用程序需要 RAM 运行时,将 X 归还给它们。但是,当我启动应用程序时,大部分 RAM 已被 X 占用,无论它是由两种最主流的浏览器创建的,都不会从 X 回收任何 RAM。它会一直保留到我重新启动。
使用“免费”和其他工具并没有帮助我诊断出 WTF X 是什么。
有任何想法吗?
免费输出:
退出铬后约一分钟。
total used free shared buff/cache available
Mem: 8035708 4037332 2202604 1014656 1795772 2713256
Swap: 12441592 0 12441592
过了一会儿。
total used free shared buff/cache available
Mem: 8035708 2497680 4168392 552812 1369636 4715280
Swap: 12441592 0 12441592
一天后,空间很快就填满了 7.9GB,所有的标签都崩溃了。
total used free shared buff/cache available
Mem: 8035708 5855132 739016 1012864 1441560 923084
Swap: 12441592 975712 11465880
在类似的加油和撞车事故之后。
total used free shared buff/cache available
Mem: 8035708 5777812 638932 714256 1618964 1273920
Swap: 12441592 0 12441592
过了一段时间,打开了 Chromium,运行了几个小时(没有达到最大 RAM),然后关闭它:
total used free shared buff/cache available
Mem: 8035708 737080 5869896 438592 1428732 6604848
Swap: 12441592 524436 11917156
启动后立即:
total used free shared buff/cache available
Mem: 8035708 689232 6449124 322912 897352 6769772
Swap: 12441592 0 12441592
Chromium 退出后:
total used free shared buff/cache available
Mem: 8035708 967988 5677848 531960 1389872 6284744
Swap: 12441592 336 12441256
答案1
据我所知,没有问题。“可用”内存的行为符合预期。随着应用程序占用更多内存,可用内存会减少;一旦它们退出,可用内存就会再次增加。
系统访问交换空间时,系统变得迟缓或用户界面完全停滞也是正常现象,尤其是当支持交换空间的设备速度较慢时。由于硬盘驱动器的访问延迟较高,因此其性能通常不如闪存。
众所周知,Chromium/Chrome 和 Firefox 都会在打开大量标签时占用大量内存。要么为系统添加更多 RAM,要么大幅减少打开的标签数量。使用更快的交换空间支持设备也许可以缓解此问题。
free -h
您可以使用(用于人类可读的数字格式)查询虚拟内存管理器以获取当前内存统计信息。您可以使用或和调整后的排序-h
列出占用最多内存的 (N-1) 个进程。ps aux --sort -rss | head -n N
top
您也可能对。。。有兴趣如何找出哪个程序使用了过多的内存?