如何判断我的 Windows 服务器是否正在交换?

如何判断我的 Windows 服务器是否正在交换?

我正在使用 Process Explorer 来监控我的 Windows 服务器,同时它重建一些数据。这主要是 CPU 密集型进程,但我想确保它没有交换。我如何知道它是否在使用 Process Explorer?我最初的猜测是在系统信息窗口中,它是分页文件写入增量。是吗?不是吗?我是个白痴?

*屏幕截图不是服务器的...只是一个例子。

替代文本http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

答案1

“页面输入/秒”是需要监视的计数器,但是您不必担心它的“交换”,因为 Windows 不像 *nixes 那样使用页面文件。

首先你需要明白,windows 页面是进不是出。我将引用Eric Lipperts 博客文章(略作修改)因为我自己也说不出更好的了:

“RAM 可以看作是一种性能优化。访问 RAM 中的数据(信息存储在以接近光速传播的电场中)比访问磁盘上的数据(信息存储在巨大而沉重的黑色金属分子中)要快得多

操作系统会跟踪哪些进程最常访问存储中的哪些页面,并在 RAM 中复制这些页面,以提高速度。当进程访问与当前未缓存在 RAM 中的页面相对应的指针时,操作系统会执行“页面错误”,转到磁盘,并将页面从磁盘复制到 RAM,合理地假设该页面不久后会再次被访问。

操作系统在共享只读资源方面也非常聪明。如果两个进程都从同一个 DLL 加载同一页代码,那么操作系统可以在这两个进程之间共享 RAM 缓存。由于代码可能不会被任何一个进程更改,因此通过共享来节省重复的 RAM 页是完全合理的。

但即使有巧妙的共享,这个缓存系统最终也会耗尽内存。当这种情况发生时,操作系统会猜测哪些页面最不可能很快再次被访问,如果它们发生了变化,就将它们写入磁盘,并释放该内存以读取更有可能很快再次被访问的内容。

当操作系统猜测错误时,或者更有可能的是,当 RAM 不足以存储所有正在运行的进程中所有经常访问的页面时,计算机就会开始“崩溃”。操作系统会将所有时间都花在写入和读取昂贵的磁盘存储上,磁盘会不断运行,您无法完成任何工作。

这也意味着“内存耗尽”很少会导致“内存不足”错误。它不会导致错误,而会导致性能不佳,因为存储实际位于磁盘上这一事实的全部成本突然变得重要。

另一种看待这个问题的方式是,程序消耗的虚拟内存总量实际上与其性能没有太大关系。真正相关的不是消耗的虚拟内存总量,而是 (1) 其中有多少内存没有与其他进程共享,(2) 常用页面的“工作集”有多大,以及 (3) 所有活动进程的工作集是否大于可用 RAM。

现在应该清楚了为什么“内存不足”错误通常与物理内存大小甚至可用存储空间大小无关。它几乎总是与地址空间有关,在 32 位 Windows 上,地址空间相对较小且容易出现碎片。"

另外几点:

  1. dll 和程序文件始终只被分页,从不被分页,因为它们已经在磁盘上(并且通常是在物理 RAM 不足时释放的第一页)
  2. 与任何其他内存问题相比,您更有可能耗尽可用页表条目或出现严重内存碎片(除了前面提到的整体性能不佳
  3. 即使没有页面文件,你仍然可能会遇到页面错误
  4. 一般来说,查看已提交的内存更能说明进程如何使用内存

有关 Windows 中内存管理工作原理的完整图片,请参阅

Windows NT 中的虚拟内存管理器

如果你认为你有记忆问题,我首先建议你看这个演示排除 Windows 内存故障

这很好地解释了为什么有时你会因为内存碎片而出现“内存不足”的情况:

也可以看看突破 Windows 的极限:物理内存

有关虚拟内存、内存碎片和泄漏以及 WOW64 的更多信息

RAM、虚拟内存、页面文件和所有这些东西(微软支持)

更新:

Windows 10 对内存的处理方式略有不同,随着时间的推移,您将看到一个名为“系统和压缩内存”的过程。Windows 10 在页面调出列表中添加了一个“压缩存储”。此 RAM 是系统拥有的用户内存(通常系统只有内核内存)。此内存被压缩,平均减少到约 30%。这允许将更多页面存储在内存中(对于那些进行计算的人来说,这是 70% 以上的空间)请注意,如果内存仍然有压力,则可以将压缩存储(用户模式系统进程空间)中的页面放在修改后的列表(压缩)上,然后可以将其写入物理页面文件。系统将看到它们来自系统用户模式空间并经过压缩,并且不会尝试将它们放回存储中。因此,在 Windows 10 系统上,系统可能看起来像是在吸入 RAM,但实际上它只是试图更有效地使用 RAM。Mac 用户自 2013 年以来一直在使用类似的功能,而较新版本的 Linux 内核采用了一种内存压缩版本。这种节省内存的方法不仅更好,而且在其他操作系统中已经很常见。

答案2

是的,分页增量会实时显示服务器分页(或“交换”)的量,但仅限于当时的情况。为了更仔细地观察并查看历史视图,我建议使用性能监视器 (性能监视器绘制或记录这些增量(以及任何其他感兴趣的性能计数器,可能有助于将特定事件或活动与分页活动峰值关联起来)。

答案3

性能监视器 (perfmon) 是您的好朋友。您正在寻找硬页面错误(即,当必须从磁盘读取满足请求所需的内存页面时发生的页面错误),因此监视硬页面错误和软页面错误都是次优选择。

使用 perfmon 观察“内存”对象中的“页面输入/秒”计数器,以了解发生了多少个硬页面错误。

答案4

一个好的经验法则是,如果你的提交费用高于你的物理内存,那么你肯定是在分页某物,但如果您的应用使用始终处于使用状态的单个固定数据缓冲区,则通常根本不会将其调出。启动时可能会有一些延迟,因为其他内存会被调出以腾出空间。

相关内容