rba*_*dar 6 process memory firefox
自从大约一年前我回到 Firefox 后,我一次又一次地面临同样的问题——浏览器一直在消耗我的记忆。问题源于(可能是错误的假设),一旦用户关闭选项卡,浏览器就会释放为该选项卡分配的内存。当然,Firefox 和其他许多人一样在后台运行一些缓存。重新打开最近关闭的标签似乎也与此有关。因此,这种内存释放不会像用户希望的那样快。
我在许多论坛(包括 Mozilla 的)中读到,如果另一个进程需要 Firefox 现在不需要的分配内存,操作系统(在我的情况下是 Debian Jessie)将从浏览器中获取一些并将其提供给另一个进程。是的,这确实应该发生,但事实并非如此。Firefox 一直在吃掉常驻内存,一旦它几乎全部用完(比如 3.8GB 中的 3.6GB 左右),交换就会开始。所有这些都会导致极其痛苦的浏览体验。关闭标签没有任何好处。即使我关闭 Firefox,分配的内存仍然存在一段时间。
我想知道是否可以强制操作系统重新分配进程一直使用的所有内存(包括交换)(即使现在没有其他进程需要该内存)但现在已关闭。
编辑:
这里要求的是在 Firefox 关闭之前和之后调用的结果free
(-h
出于可读性目的使用参数):
前:
total used free shared buffers cached
Mem: 3.7G 3.6G 134M 6.8M 5.0M 166M
+/- buffers/cache: 3.4G 306M
Swap 3.7G 2.8G 916M
Run Code Online (Sandbox Code Playgroud)
后:
total used free shared buffers cached
Mem: 3.7G 2.9G 856M 4.8M 12.0M 179M
+/- buffers/cache: 2.7G 1.0G
Swap 3.7G 2.7G 998M
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,一些轻微的减少是明显的,但与浏览器关闭后 20-30 分钟使用的总内存(驻留和交换)相比,这不算什么。除了 Firefox 之外,除了通常的 Debian 进程和几个面板小程序(天气、CPU+HDD+Mem 监控、网络监控等)之外,我什么都没有启动,它们不占用大量内存,我几乎看不到它们的值htop
. 我所做的基本上就是让浏览器全天打开并关闭/打开标签。我不得不承认我的会话中有很多选项卡,但是我在开始时(以及稍后)只加载了其中的几个。我的猜测是,即使没有加载内容,标签也可能会占用大量内存。然而,这并不能解释为什么在关闭浏览器后我有如此高的内存分配。事实上,它是如此之高,以至于有时我无法正确关闭系统而不得不冷关机。
简而言之,答案是否定的:一旦应用程序分配了内存并使用了它,它就“属于”该应用程序,除非该应用程序释放它,否则没有其他任何东西可以回收它。(这并不像调用 while 那样简单,free()
因为它只是将内存返回到单个应用程序的池,而不是系统。)
交换应该有助于解决这个问题:一旦物理内存已满,操作系统可以将很少使用的内存页面移至交换。如果实际工作集大于物理内存,这只会导致系统崩溃:内存总是在交换区中移动并返回,系统无法执行任何有用的操作。
在 Linux 上,作为最后的手段,OOM 杀手将介入并终止进程以回收其内存。
奇怪的是,当 Firefox 停止时,你并没有看到内存被恢复。也许 Firefox 进程在窗口消失后需要一段时间才能真正退出(请检查ps
或您的任务管理器)。当进程停止时,其分配的所有内存都将被释放并可供其他进程使用。