有没有一种方法可以检查特定进程的虚拟地址空间,以检查该进程是否正在经历虚拟内存碎片?我知道这听起来像是一件我不应该担心的事情,但我们有一个进程因 OutOfMemory 错误而失败,但系统上有足够的可用内存。
该进程有大约 500 兆字节可用,而请求的内存调用为 417 兆字节。这让我认为没有足够的连续空间可用。但当然,在我能够证明这一点之前,我不能将其视为问题。
过去我曾使用过地址空间监视器(http://www.hashpling.org/asm/) 和 ProcMon 来帮助我解决这些类型的问题,但它们在 Windows 2000 上不受支持。有人对 Windows 2000 有什么想法吗?
除了显而易见的,升级操作系统。(相信我,那是一场完全不同的战斗)谢谢。
答案1
我认为连续空间不会成为问题,通常,在 Windows 上创建页面文件时,它将是磁盘上不可移动的对象,即使碎片整理也无法移动它。即使它是碎片化的,我认为除了速度稍微变慢之外,它不会给您带来任何问题,我认为没有任何理由导致内存使用不能跨越页面文件的两个段。但是,如果您真的担心它并想排除它,您可以将页面文件缩小到最小值并对分区执行完整的碎片整理,然后恢复它,这样您希望它会被放置在连续的空间中。
但实际上,我认为最好增加页面文件,或者理想情况下为服务器添加更多内存。