问题:
我们的虚拟化数据库服务器上的某些东西正在使用大量的页面文件。大约一周前,我们注意到了这一点,当时操作系统驱动器的可用空间在一个下午内从 30+GB 减少到大约 500KB。我以巨大的页面文件 (75+GB) 的形式找到了已用完的空间。我关闭了系统管理的页面文件,并将其分成相等的部分,分布在 4 个逻辑磁盘上(在 4 个不同的物理阵列上)。尽管服务器似乎有几 GB 的未使用 RAM,但现在我们只面临内存不足错误,而不是硬盘空间不足和内存不足错误。
我不知道如何找到确切的原因,但我已经运行了一些工具,希望它们能够清楚地找出问题的根源,但对我来说,没有什么是足够明显的。
细节:
- 虚拟化 Windows Server 2008 R2,并在其上运行 Sql Server 2008
- 为虚拟机静态分配 32 GB RAM
- Sql Server 配置为使用 18GB
- 小型 MySql 实例也在运行
- query_cache_limit 设置为 8MB
- query_cache_size 设置为 128MB
- 具有域控制器角色并且是全局目录(是的,我知道它不应该是域控制器,但我们的资源有限)
- 页面文件被分成 4 个部分,分布在 4 个逻辑磁盘上,每个逻辑磁盘都是主机虚拟服务器上自己的物理阵列上的 vhd
- 每个部分的页面文件设置为最小 8192MB,最大 12288MB
- 原始页面文件为 48GB,且动态扩展
- 在问题发生期间和问题未发生时,线程和进程的数量保持大致相同 - 线程:~720-750,进程:~62
我尝试过的事情:
- 将 Sql Server 限制为较少的 RAM(14GB) - 无效
- 停止并禁用 MySql5.5 服务,然后重新启动
- 增加 Sql Server 以使用更多 RAM - 28GB - 无效
- 运行 Sysinternals 的 RAMMap - 没有出现任何异常
我无法永久停止 MySql 服务,而 Sql Server 服务需要在白天继续运行。似乎内存或页面文件使用量激增,由于资源不足,甚至无法远程访问服务器,然后不久之后我就可以再次连接。几分钟后,我甚至无法打开记事本或任务管理器。屏幕上弹出许多与内存不足相关的错误(由于问题目前没有发生,所以我手边没有这些错误,但当它们发生时我会更新各种错误)。
在整个发生这种情况的过程中,任务管理器显示有几 GB 的可用物理内存(12GB 到 2GB 之间,取决于分配给 Sql Server 的内存)
我怀疑最初可能在其中发挥了一定作用的一件事是,主机服务器上的一个阵列有一个磁盘发生故障,而另一个阵列预计会出现故障(raid5,3 个磁盘),因此如果写入延迟,我认为它们可能会堆积在内存或页面文件中。
我是否可以先尝试通过一个进程列表来确定页面文件使用率过高的原因,该列表会详细显示它们使用了多少页面文件和物理内存?或者有什么方法可以判断这种内存使用率是否是硬件或操作系统存在更严重问题的征兆?