背景信息
在 Windows 操作系统中,内核以及应用程序是通过虚拟内存来进行内存管理和使用。
由于物理内存是有限的资源,Windows 引入了 Paging File (页面文件)实现虚拟内存。以32位操作系统为例,每个进程有自己 2 GB 专用的用户态虚拟地址空间。当现有的所有进程正在使用的内存超出了可用的物理内存时,操作系统将页(4 KB 片)的一个或多个虚拟地址空间移动到计算机的硬盘,而后释放物理内存用于其他用途。在 Windows 系统中,这些"paged out"被移动出物理内存的页存储在一个或多个文件(Pagefile.sys 页面文件)分区的根目录中的。
相比于Linux系统,Windows系统由于图形化界面操作相对容易而受到许多用户的青睐,在购买ECS实例时,需要至少1G内存才能选择Windows系统,于是大部分用户就选择1G内存。这1G内存对于系统运行来说是足够了,但是再配置环境、安装更多软件后就会出现内存不足的情况。
虚拟内存不足引发的问题现象
一般而言,当系统缺少虚拟内存会引起很多问题,包含但不限于以下情况:
1. 远程登录显示蓝屏

2. 远程登录提示页面文件太小

3. 控制台连接管理终端登录服务器卡在欢迎页面

4. 安装IIS提示资源不足

5. 安装.NET Framework、FTP时提示系统资源不足

6. Windows 2008一键安装包安装Mysql时错误以及安装完成后Mysql无法启动

7. 其他方法安装Mysql卡住

8. 安装wamp后,不能启动wampmysqld服务

9. 添加角色时提示页面文件太小,无法完成操作

10. 服务器管理器控制台打开后自动关闭

11. 连接管理终端出现错误提示框“您的系统虚拟内存不足”

诊断方法
一般而言,出现操作系统虚拟内存不足,有2种方法检查。
方法1:检查系统日志
打开事件查看器(运行->eventvwr), 在系统日志中发现"Resource-Exhaustion-Detector"报出的2004 错误,例如:

Windows 成功诊断出虚拟内存不足的情况。以下程序使用了大部分虚拟内存: mysqld.exe (1320) 使用了 2801614848 字节;svchost.exe (808) 使用了 422494208 字节;tomcat8.exe (2744) 使用了 336797696 字节。
方法2: 检查任务管理器
任务管理器中发现检查已提交内存与虚拟内存的比例。%Commited Bytes In Use 等于已提交虚拟内存/虚拟内存上限, 该图中 (3790/4093) 已经超过80%,根据微软官方说明当“已提交虚拟内存/虚拟内存上限”超过80%时表示虚拟内存不足。

解决方案
在这种情况下,请尝试如下方案:
方案1:由于默认ECS没有配置Paging File,可手工配置Paging File。
方案2: 如果配置Paging File后,仍然出现内存不足情况,有2种可能。
- 应用程序对内存要求高,请增大实例规格,调高ECS的物理内存,同时相应的增加Paging File。
- 请排查请检查是否有内存泄露, 具体请参考微软官方博客的排查方法:内存问题排错概要-第一部分、内存问题排错概要-第二部分。