我的 w3wp 使用过多虚拟内存后每 60 秒回收一次。
我跑了IIS 调试诊断工具在工作进程回收之前捕获内存转储;最有趣的部分似乎是这样的:
Virtual Allocation Summary
Reserved memory 4.88 GBytes
Committed memory 328.27 MBytes
Mapped memory 17.36 MBytes
Reserved block count 524 blocks
Committed block count 1082 blocks
Mapped block count 43 blocks
因此,4.88 GB 的保留内存看起来确实很大。但 DotNetMemoryAnalysis 或常规内存压力分析器似乎都没有告诉我这 4.88 GB 去了哪里。
我如何才能知道?
答案1
虚拟内存并非稀缺资源。操作系统可以几乎零成本地创建大量虚拟内存。因此,无需担心虚拟内存消耗。您可以忽略它。David Wang 在博客文章如果你想了解细节。
无论回收是基于虚拟内存消耗的,都需要进行更改,不要这样做,因为这样做毫无意义。如果您对 4GB 文件进行内存映射,您将使用 4GB 的虚拟内存,即使执行此操作所需的实际系统资源微不足道。(并且它不会显示为映射内存,因为“映射内存”仅计算出现故障的页面。)
基于虚拟内存的进程回收是完全无用的。