Windwos Server 2008 中出现物理内存占用极高甚至宕机,但任务管理器中各进程的内存占用并不多,查来查去也不知道什么原因的情况。使用RAMMAP的工具检查,发现这些内存被Metafile占用了,经查阅Metafile是系统缓存的一部分同时也包含了NTFS的数据。。此问题可能是由于Server 2008中为保证服务器性能不限制系统缓存,服务器系统长时间执行I/O,系统文件缓存不断占用物理RAM造成,现在通过限制系统缓存大小来解决。
Microsoft提供了一个Microsoft Windows Dynamic Cache Service这样的话可以用GetSystemFileCacheSize API 和 SetSystemFileCacheSize API去设置最大的内存使用率,其实对于这个Metafile占用内存的原理的话,一般都是因为在文件打开后为了快速查询和复制,服务器会考虑把这些文件放置到自己的内存在,那么如果文件被打开的或是查询的越多那么内存占用就会越多。其实定期安排服务器重启的话,有一定的改善作用;但是修改这个数值才是真的解决方法,因为这个问题是Known Issue。
下面就是解决方法:
首先以管理员身份登录计算机,从微软网站下载一个叫 Microsoft Windows Dynamic Cache Service 的工具,进入微软网站点击网页中的红色Download按钮,稍等会自动弹出下载保存对话框。
现在下载Microsoft Windows Dynamic Cache Service的默认文件名是DynCache.zip(这里以这个文件名为例),解压这个文件到 DynCache 文件夹(下面笔者以这个文件名称为例),得到如图这些文件,如果你的英文不错可以阅读ReadMe.docx查看详细使用方法,如果不好请继续看下文
打开Retail文件夹,得到如图的文件夹,这里的文件夹是根据自己的操作系统和CPU需要选择不同版本,这里简单解释一下:
1) I386,即我们最为常见的X86架构的计算机和操作系统(32位),这里我们右击——计算机——选择“属性”,就可以看到系统类型是32位还是64位,如果是32位则使用I386文件夹下面的文件。
2) AMD64,就是我们最常用的64位架构的计算机和操作系统,家用的64位计算机基本都是这种架构,而且我们最常用的阿里云服务器E系列至强CPU也是AMD64。
3) IA64 是intel面向高端的64位 CPU ,这种CPU 是不能兼容原先的 X86 下的程序,这种架构日常并不多见,所以这里就不详细说,I-tanium(安腾)系列CPU则是采用这种架构。
这里笔者的用的是AMD64文件夹(下面以这个为例)
1) 打开AMD64文件夹,找到DynCache.exe,复制这个文件。
2) 打开“计算机”,在地址址中输入 %SystemRoot%\System32 (事实是就是X:\Windows\System32,X代表系统盘,这里笔者的是C盘),粘贴刚才的DynCache.exe到这里。
然后我们以管理员身份运行“命令提示符”,复制下面粗斜体的命令到“命令提示符”中,右击粘贴(手动输入注意空格和引号),然后按下回车键。
sc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
接着我们回到DynCache文件夹,这里找到一个名为DynCache.reg的注册表文件,双击导入。
1) 最后我们打开“注册表”编辑器(开始——运行——输入——regedit——确定),依次展开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
2) 在右侧找到 MaxSystemCacheMBytes,双击它,这里我们选择“十进制”,在数值里输入要限制最大的缓存数(单位是MB),例如笔者输入800就是限制缓存最大为800MB,输入0为不限制。
3) 如果想卸载本工具,在“命令提示符”中依次输入sc stop DynCache —— 回车 —— sc delete DynCache —— 回车
3) 最后重启计算机即可,该工具还有其他一些设置,就不在本文的讨论范围内了,有兴趣的自行阅读ReadMe.docx吧。
发表评论