在Windows Server 2008 R2上运行x86进程,此进程中的堆具有99%的外部外部碎片:
LFH Key : 0x17fa3a27
Termination on corruption : DISABLED
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-----------------------------------------------------------------------------
00580000 00000002 97344 85672 97344 1485 195 13 0 1d6 LFH
00820000 00001002 1088 260 1088 33 6 2 0 0 LFH
00ae0000 00001002 256 144 256 0 2 1 0 0 LFH
Virtual block: 02620000 - 02620000 (size 00000000)
Virtual block: 07380000 - 07380000 (size 00000000)
Virtual block: 06d60000 - 06d60000 (size 00000000)
003d0000 00001002 31616 15580 31616 1521 160 9 3 d LFH
015e0000 00001002 15616 4084 15616 2266 43 11 0 15 LFH
External fragmentation 55 % (43 free blocks)
01ed0000 00001002 256 160 256 1 3 1 0 0 LFH
01e10000 00001002 256 4 256 0 2 1 0 0
01e80000 00011002 256 4 256 1 2 1 0 0
01ff0000 00001002 256 4 256 1 2 1 0 0
01dd0000 00001003 256 4 256 2 1 1 0 N/A
01f90000 00001003 7424 2036 7424 1936 117 6 0 N/A
External fragmentation 95 % (117 free blocks)
028c0000 00001003 7424 2252 7424 1639 49 7 0 N/A
External fragmentation 72 % (49 free blocks)
02a60000 00001003 3328 2068 3328 2036 40 6 0 N/A
External fragmentation 98 % (40 free blocks)
027a0000 00001003 3328 1964 3328 1927 51 7 0 N/A
External fragmentation 98 % (51 free blocks)
02840000 00001003 7424 2400 7424 2372 41 6 0 N/A
External fragmentation 98 % (41 free blocks)
02980000 00001003 3328 1812 3328 1785 37 6 0 N/A
External fragmentation 98 % (37 free blocks)
02b70000 00001003 7424 2548 7424 2528 39 9 0 N/A
External fragmentation 99 % (39 free blocks)
02960000 00001002 64 16 64 3 3 1 0 0
03e10000 00041002 256 8 256 3 1 1 0 0
-----------------------------------------------------------------------------
外部碎片主要是由于“释放内存”造成的。免费的'不是常数而不是缺乏记忆。
有人建议在此服务器上添加更多物理内存,但据我了解,32位进程的最大VM地址(甚至映射到物理内存)不会超过4GB。从任务管理器,我只能看到内存(私有工作集)只有大约400MB。
我正在尝试为此过程获取VMMap结果。然而到目前为止,我看不出增加物理内存对这种情况有帮助的原因。如果工作集大于物理可用内存,则添加更多物理RAM可能会有所帮助。
顺便说一句,为什么有些文章建议查看单个进程的私有字节来确定物理内存是否足够?私有字节是应用程序实际分配的内容,但包括页面文件用法;让我们说如果私有字节很大,添加更多物理内存会停止寻呼部分内存吗?