Windows Server 2008 服务器内存使用率过高 且任务管理器找不到对应的使用进程

环境:

       Winserver2008+Sqlserver2008

问题和解决过程:


       早上医院反应,PACS系统业务特别慢,登上服务器看内存已经使用了31.8G(32G的内存),打开任务管理器看 占用最多的是sqlserver.exe 大约8G 其他进程最大的也就IIS的进程,都没超过1G,加起来肯定到不了31.8G
       网上搜了下,最开始我认为是sqlserver的问题,我认为sqlserver有部分内存使用可能在任务管理器中显示不出来
       改了下sqlserver数据库的内存使用限制那个属性 改成了24G,但是我发现sqlserver.exe的使用率并没有减少(之前在一家医院改过这个值,改完之后sqlserver.exe的内存使用就慢慢下来了,证明这个设置是有用的),
       然后我又用DBCC MemoryStatus查了一下,VM Committed和VM Reserved的值都没有变化,VM Reserved的值约等于系统内存,VM Committed的值和任务管理器显示的也差不多,这让我开始认为不是sqlsever的问题了。
    (可以看出我是个sqlserver小白。。)
    
       然后又考虑到是不是服务器中毒了,因为服务器昨天是检测出来问题的(病毒利用WinRAR的UNACEV2.dll的漏洞,修改了服务器上很多影像文件夹的权限,导致影像无法调阅),但是通过资源监视器和任务管理器,并没有发现异常进程,这方面的假设也很快被我自己否定了
    
       然后又在网上搜了搜,看看有没有类似的情况,点了(https://blog.51cto.com/xu3jin/1529705)这个,发现现象差不多。
    
       这里面提到了RAMMAP这个工具,我看这个工具就是检测服务器内存使用的,应该对服务器没什么影响,就下载了一个放到的服务器上试试。
    
       运行了一下,终于找到的那"丢失"的10+G的内存了! 原来都被Metafile这个东西占用了。 然后我点了empty下的Empty System Working Set,内存释放了16G出来。
       MetaFile可以理解为系统缓存,Windows server 2008系统中,比如存在大量的文件拷贝等磁盘io操作,系统会自动将其缓存到内存中,这部分被占用的内存在任务管理器的中未体现出来的,所以用户会认为系统的内存占用异常。同时,MetaFile默认是没有限制的,所以系统会无限制占用内存。但是对于Windows 2012之后,操作系统会自动限制系统缓存的上限从而避免物理内存的耗尽。这个描述和医院实际情况相似,服务器是Pacs系统,所以有大量的影像文件写入
    
       当然这样做只是个临时办法,后期文件缓存还是会慢慢增长起来的,想要永久解决此问题,就需要注册一个DynCache服务,限制系统缓存的使用
    
        以下引用自:https://help.aliyun.com/knowledge_detail/40996.html
        微软官方Blog有一篇文章介绍因为MetaFile耗尽系统物理资源,通过Dyncache服务来解决此类问题,请注意该软件不适用于Windows 2012 之后的系统。
        Troubleshooting Windows Performance Issues: Lots of RAM but no Available Memory
        Microsoft Windows Dynamic Cache的更新程序,用户可以下载后添加到服务中,通过修改注册表来限制动态缓存的最大值,比如设置上限为200M等,这样系统就可以把作为缓存使用的内存设置了上限值。
        下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=9258 
    具体设置步骤如下:
        1. 解压后根据不同系统版本中对应的DynCache.exe文件复制到C:\windows\system32中。
        2. 以管理员身份打开命令提示符,执行如下命令添加服务:
      sc create DynCache binPath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
        3. 回到DynCache文件夹,找到DynCache.reg的注册表文件导入。
        4. 打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
        5. 右侧找到MaxSystemCacheMBytes,双击它,这里我们选择“十进制”,在数值里输入要限制最大的缓存数(单位是MB),输入800就是限制缓存最大为800MB,输入0为不限制。
        6. 到服务中启动DynCache服务。
        注:下载的dyncache解压出来是有多几个版本可选的,请选择retail amd64的版本,不要选择ia64(ia64表示安腾的64位处理器版本)。
 

你可能感兴趣的:(Windows)