Hyperic SIGAR 报告 window 2012 r2 上的不同交换使用情况

Hyperic SIGAR report different swap usage on window 2012 r2

我是 运行 Hyperic SIGAR,通过 java window 2012 r2。使用 Swap sigar API (http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/Swap.html),我能够得到以下信息:交换总计 = 5032562688,已使用的交换 = 1541095424,免费交换 = 3491467264。 这表明当前交换使用量约为 30%。 但是,如此处 https://serverfault.com/questions/399855/how-much-swap-is-being-used-on-windows 所述,使用计数器页面文件 -> 性能监视器中的使用百分比检查 Window 上的交换使用情况表明交换使用率为 0%。 (% Usage Peak 也是 0%)。 0% 的交换使用似乎更正确,因为 window 服务器根本没有太多负载。 任何人都知道为什么 SIGAR 报告不同/不正确的值?

Sigar 报告交换使用:

ullTotalPageFile -> 交换总数

ullAvailPageFile -> 免费交换

ullTotalPageFile - ullAvailPageFile -> 使用的交换

http://msdn.microsoft.com/en-us/library/aa366770(VS.85).aspx

WMI 报告交换使用:

swapTotal -> SizeStoredInPagingFiles(可以存储在操作系统分页文件中的千字节总数——0(零)表示没有分页文件。请注意,这个数字并不代表实际的物理大小磁盘上的分页文件。)

swapFree -> FreeSpaceInPagingFiles(可以映射到操作系统分页文件而不会导致任何其他页面被换出的数量,以千字节为单位。) https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx

由此产生的问题是: 在我看来,Windows 通过 ullTotalPageFile 返回 Sigar 的是所有虚拟内存和物理内存的组合——而不仅仅是 "Total Page File" 指标中隐含的虚拟内存。 (https://communities.vmware.com/thread/354362)

更多详情: 由于 Windows API 函数报告内存指标的方式,无法准确检索交换(虚拟内存)大小,因为 Windows 报告总提交内存,即物理内存加上交换文件大小.唯一可以应用的解决方案是在知道页面和物理内存大小的情况下通过计算扣除交换大小。