![当我没有运行任何程序时,为什么我的内存使用率高达 65%?](https://linux22.com/image/1565410/%E5%BD%93%E6%88%91%E6%B2%A1%E6%9C%89%E8%BF%90%E8%A1%8C%E4%BB%BB%E4%BD%95%E7%A8%8B%E5%BA%8F%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E7%8E%87%E9%AB%98%E8%BE%BE%2065%25%EF%BC%9F.png)
答案1
总结:从以下网址下载 x86 exe查找僵尸手柄,运行它,看看哪个进程正在创建所有这些僵尸进程。
你注意到这个问题是正确的。1
有几个常见原因:
- 句柄泄漏,尤其是 GDI 对象的句柄泄漏
- 句柄泄漏,导致僵尸进程
- 驱动程序锁定内存,这可能是由于驱动程序错误或甚至正常操作造成的(例如,VMware 膨胀会故意“吃掉”你的 RAM 以尝试在虚拟机之间保持平衡)
获取更多信息
现在我们能做的第一件事就是利用优秀的内存地图工具,它将识别内存使用情况所属的广泛类别。这些不一定能告诉您它是什么,但会为您提供下一步查看位置的建议。
针对您的具体情况,我建议您提供的截图。您需要查看该Active
列 — 该Standby
列包括“可用”内存下的缓存。注意,这个数字Page Table
非常高 — 我预计它应该在 512 MB 以下,而不是超过 2 GB!
缩小范围
从这里我们可以猜测:这可能是由于僵尸进程造成的。在 Windows 中,当一个进程发射另一个握把到已启动的进程。当已启动的进程退出时,启动进程应释放这些句柄。如果未能释放,只要启动进程存在,这些句柄就会一直存在。
我们实际上可以在 RAMMap 的“进程”选项卡上得到进一步确认。请注意,在您的例子中,按进程名称排序,千并且有tasklist.exe
数百个powershell.exe
实例挂起。事实上,任何私有内存使用量为 的情况0 K
都是进程已结束但仍处于僵尸状态的危险信号。
现在你需要弄清楚哪个进程正在创建所有这些僵尸进程。有几种方法可以做到这一点。您可以使用“详细信息”选项卡上的任务管理器并添加“句柄”列。任何拥有大量僵尸进程的进程也会打开过多的句柄。您还可以使用进程探索器查看特定进程打开了哪些句柄。
然而,迄今为止最简单的方法是使用FindZombieHandles 工具最初由 Bruce Dawson 2创建。如果您以管理员身份运行此工具,它会告诉您哪个进程正在创建并保存所有这些僵尸进程。从那里,您可以终止进程、卸载应用程序或将其报告给开发人员。
1正如我在其他地方解释的那样,任务管理器的进程选项卡显示内存使用情况排除磁盘缓存,因此常见的(Linux)解释“空闲 RAM 是浪费的”通常不适用。就任务管理器而言,磁盘缓存是可用内存的一部分。没有提到“空闲”内存。
2非常感谢布鲁斯·道森此工具的源代码可用这里, 和博客文章描述该工具的背景和用法。上面的链接是我的叉子调整为构建一个独立的 exe,而不依赖于特定的 .NET Framework 版本。
答案2
可用 RAM 是一种永远被浪费的能力。一个拥有 16GB RAM 的系统,如果今天只使用了 8GB,明天就不可能使用 24GB。你不能把 RAM 留到以后再用。正因为如此,现代操作系统会尽一切努力尽可能地保持 RAM 的使用,以尽可能少地浪费 RAM。
假设您的系统要释放更多 RAM,这意味着现在需要付出一些努力才能释放这些 RAM。由于您的系统已经有足够的可用 RAM,因此这种努力可能没有任何回报。如果系统想要使用释放的 RAM,它必须再次使用它们,这需要付出更多努力才能撤销释放它们所做的工作。
例如,当系统上的某个程序读取或写入文件时,如果系统有足够的可用 RAM,它将把该数据保存在内存中。如果其他程序读取该文件,则磁盘 I/O 将得到节省。如果稍后需要该内存用于其他用途,则可以简单地将其从一种用途转换为另一种用途,而无需浪费精力将其释放以便再次使用。
换句话说,你的操作系统是高效的。几乎所有现代操作系统都是这样工作的。
答案3
...根据此屏幕截图,您正在运行至少 11 个程序,并且您还没有禁用“搜索索引”或“桌面窗口管理器”。或者大概是任何其他服务等以及 msconfig 条目和动画等。
答案4
由于您的计算机已开启,因此正在使用 RAM。
进一步来说,操作系统是一个程序。
- 探索者
- 任务管理器
- 小娜
- 截图工具
- CTF 加载器
- VyprVPN服务
上面列出的所有内容以及一切您的屏幕截图中显示的是在操作系统上运行的程序,它们是全部程式。