当我调查一些硬页面错误时,我遇到了这个问题。对象内存和进程从同一个计数器给出不同的值:页面错误/秒。是否有一些操作系统相关的进程导致页面错误,而这些进程并未受到性能监视器对象进程的监视?为什么进程\页面错误/秒总是低于内存页面错误/秒?
答案1
该计数器Memory => Page Faults/sec
表示系统范围内的页面错误计数。包括软错误和硬错误。包括用户模式和内核模式。
另一方面,计数器Process => Page Faults/sec
是一组计数器,其中每个在机器上运行的用户模式进程都有一个实例。因此,您可以检查某个特定进程引发的页面错误。或者,您可以选择该_Total
实例来获取所有正在运行的进程引发的所有页面错误的总和。
但即使您选择了_Total
,您仍然只能获得由用户模式进程引起的页面错误。而不是内核中的页面错误,例如由设备驱动程序引起的页面错误。
页面错误可以在 CPU IRQL 0(所有用户模式和大多数内核模式)或 1(内核 APC 和页面错误)处得到满足,但页面错误不能在 IRQL 2(调度)或更高级别处得到满足。
页面错误有两种:软错误和硬错误。硬错误会导致严重的性能下降,因为您必须转到磁盘(交换文件)才能解决硬错误。软错误没有那么糟糕,因为页面仍然在 RAM 的某个地方,只是不在进程的工作集中,必须从主内存的其他地方检索,这比转到磁盘要快得多。
所以这Process => Page Faults/sec => _Total
是所有正在运行的用户模式进程发生的所有页面错误的总和。Memory => Page Faults/sec
加任何其他内核模式页面错误。