虚拟内存不足造成的蓝屏_问题分析及解决
之前蓝屏的问题一直在脑子里面转, 沉下心来, 踏实走一遍看看.
1.虚拟内存文件是什么? 起什么作用?
2.如何确定虚拟内存文件的大小?
3.如何设置虚拟内存文件?
首先来回答问题1
Windows操作系统的内存管理是建立在虚拟内存的基础上的.每个进程都有自己的私有虚拟地址空间。当接近低内存资源的条件时,Windows将”最少”使用的内存页移动到称为页面文件的隐藏文件中(即pagefile.sys文件)。
页面文件是Windows用于存储修改后页面的特殊文件,将页面从RAM移动到页面文件的过程称为“分页”。
页面文件有两个主要的作用:
- 以物理文件扩展的方式存储RAM修改后数据
- 在系统崩溃的情况下,记录有关系统状态的信息
RAM的物理扩展
如果您的服务器耗尽所有可用的RAM并且没有页面文件,那么Windows将无法分配更多的内存,所以应用程序将崩溃或挂起。更糟糕的是,在某些情况下,Windows本身会变得不稳定。(这就是为什么虚拟内存不足会造成蓝屏的原因)
Windows Commit Limit(也称为系统提交)是当前分页文件的大小和Windows可用于分配内存的物理内存的总和。例如:如果有16 GB RAM和16 GB分页文件,那么提交限制将为 16+16 = 32 GB。
崩溃转储大小
在关键业务服务器上,建议将服务器配置为捕获内存转储以进行分析。Windows正在使用页面文件作为内存转储的占位符,这意味着Windows首先在页面文件中写入崩溃转储,然后SMSS进程将其复制到另一个内存转储文件。
这对页面文件大小有影响,因为它需要适应Windows崩溃期间的所有信息记录,稍后再说。
调整页面文件的大小
以前的一个经验公式 (页面文件大小= RAM * 1.5或RAM * 2);(针对SQL Server 2000)
但在新的操作系统中,逻辑应该是:你拥有的RAM越多,分页文件就越少。注意这个定义!
问题2 如何设定页面文件的大小 ?
首先应该先抓取系统到底需要使用多少内存, 才可以对页面文件大小进行规划.
系统内存抓取,就考虑使用性能监视器中的 Memory 项目来抓取.(当然抓取要有一定的时间长度才比较可靠),抓取项目参考
Memory\Committed Bytes
Memory\Committed Limit
Memory\%Committed Bytes In Use
参考: windows 性能监视器
页面文件大小设定的公式:
最大提交虚拟内存量 + 最大提交虚拟内存量*20% – RAM 容量
例如:如果服务器具有24 GB RAM,最大提交虚拟内存量为26 GB,则推荐的页面文件为:(26 * 1.2)-24)= 7.2 GB
注意了, 这里都是算的(以物理文件扩展的方式存储RAM修改后数据) 这个部分的页面文件使用估算量. 另外的那个文件功能(在系统崩溃的情况下,记录有关系统状态的信息)还没有在考虑范围之内.
内存转储的大小由它的类型决定:
完全内存转储 (RAM大小 + 257 MB)
核心内存转储 (使用的内核模式内存量[32位最大为2 GB,64位最大可以上升至8 TB])
小内存转储 (64KB~512KB)
在大多数情况下,核心内存转储其实是足够用的,因为在特定情况下仅需要完全内存转储,例如,您希望看到在用户模式下发生了什么。
根据网上查到的经验值:
在达到256GB RAM的系统上,内核内存转储的大小为8-12 GB
在达到1.5TB RAM的系统上,内核内存转储的大小为8-32 GB
注: 这并不是微软官方发布的数据, 参考即可.
页面文件要放到什么位置?
从Windows 2008及以上版本开始,您可以将页面文件放在任何分区上,而不仅仅是系统分区。
从性能的角度来看,只有Windows正在广泛使用页面文件(提交虚拟内存量大于RAM的大小)才有好处。
除了性能,磁盘快照和磁盘复制也是将页面文件移动到另一个磁盘上的另一个分区的好理由。
在这种情况下,您可以考虑将页面文件移动到另一个分区,只需确保分区在不同的物理磁盘(主轴)上运行,而不是位于同一磁盘上的不同分区上。
配置页面文件:
运行sysdm.cpl—>高级系统设置—>高级—>(性能)设置—>高级—>更改
里面有三个选项
系统管理: 默认设置 | 自定义大小 | 无分页文件
当使用系统管理选项时, windows将根据RAM的大小来确定页面文件的大小.
<1GB 页面文件大小将1.5~3*RAM
>=1GB 页面文件大小将1~3*RAM
在32位系统上,页面文件的最大大小将为4 GB.在64位系统上,例如具有128 GB RAM的SQL服务器,最大页面文件大小将为384 GB。这并不意味着Windows会自动生成384 GB的文件,只要系统需要这么多的虚拟内存。
系统管理是默认选项,虽然它允许您在大多数情况下运行系统而不用担心分页文件的大小,但有两个潜在的问题:
1. 磁盘空间 - 在具有RAM负载的系统上,页面文件大小将是巨大的
2. 页面文件碎片 - 如果页面文件扩展和缩小,可能会导致磁盘碎片和性能不佳
这是我通常建议手动配置这种服务器上的分页文件(大量RAM)的原因。
从Windows 2012开始,自动内容转储旨在减少具有大量RAM的系统上的页面文件的大小。当使用系统管理和自动内存转储启用(默认情况下),最大大小仍将是3 * RAM,但最小大小将由几个因素决定,例如RAM的大小,已提交的内存历史和可用磁盘空间,导致一个小得多的页面文件(通常小于1 GB)
无分页文件
正如我们所讨论的,即使您的服务器有足够的RAM,也不需要禁用页面文件。
有两个额外的特殊情况需要页面文件:
应用需求: 应用程序要求:没有页面文件,不支持域控制器,DFS复制,证书和ADAM / LDS服务器。
启用动态内存的虚拟机(Hyper-V):动态内存要求虚拟机具有页面文件
参考: