它是Windows 2003服务器。
我们正在进行一些性能测试,结果如下:1. 在前 5 个小时内,每秒的页面错误数非常小,大约为 10 或 20
在过去 1 小时内,页面错误跳升至 500 次/秒
在过去 1 小时内,我们发现 Java 服务器会在 6-7 秒内停止记录任何内容,然后恢复。这种情况在过去 1 小时内发生了约 200 次。
我们怀疑这是由于 JVM 垃圾收集造成的。
我想知道的是,当 JVM 执行 GC 时,与没有 GC 相比,是否预计会看到大量的页面错误/秒?
答案1
是的。
执行垃圾收集时,您往往会访问大量最近未访问过的页面。如果系统遇到内存压力,这些页面中的许多页面可能被视为要被驱逐的候选对象。
第一次访问每个这样的页面(或作为一个单元管理的页面组)时,操作系统需要将它们从驱逐候选集合中删除,而是将它们视为最近访问的页面。这需要软页面错误,以便操作系统有机会更改记账方式。
大量最近未访问过的页面被访问意味着出现大量软页面错误。