【发布时间】:2021-05-16 15:00:53
【问题描述】:
-
在 Windows 用户模式进程开始时,是什么决定了其 Virtual Address Space 的初始大小?
-
是什么导致虚拟字节在进程的生命周期内波动?
进程可用的虚拟地址空间总量受限于物理内存和磁盘上可用于分页文件的可用空间。
- 这是否意味着如果可用磁盘空间减少,Virtual Bytes 可以down?
- 它会因为有更多可用磁盘空间而上升吗?
背景
我的一个在共享托管平台上运行的 ASP.NET Webforms 网站开始失败,出现 503 错误。添加一些诊断后,我看到该应用程序非常频繁地重新启动(在繁忙时间每分钟),直到它最终死掉(503)。
进一步调试表明,该应用以大约 1.2-1.5 Gb 的 Process.VirtualMemorySize64 开头。托管服务提供商在 IIS 应用程序池设置中将虚拟内存限制设置为 1.5 Gb。难怪这个过程会在几分钟内被击落。
这让我想到了上面的问题。
【问题讨论】:
-
学习操作系统内存管理的一些基本概念(不仅适用于 Windows 或 .NET)应该可以帮助您自己回答问题,en.wikipedia.org/wiki/Virtual_memory。这里真正的问题是“应用程序以 1.2-1.5 Gb 左右开始”,因为一个健康的应用程序不应该是这样的。 Microsoft 在 docs.microsoft.com/en-us/troubleshoot/aspnet/high-memory-level 等文章中提供了提示,您可以了解如何使用内存分析器进一步调查本地 IIS。