最近一段时间,我总是遇到服务器用一段时间后就会卡顿!具体表现为客户端的JAVA语言开发的应用程序在做业务操作的时候会卡顿或者提示程序无影响的现象,而且是所有连接到这一台服务器的所有客户端的程序都有这样的现象;这样的情况下,就定位到了服务器上可能存在问题了。马上通过网络远程服务器,但是这时却提示无法远程该服务器!难道是服务器直接宕机了?直奔机房,通过直连的显示器查看该服务器,发现这台服务器也没有死机,机器机箱外壳指示灯也无异常。但是在操作服务的时候特别卡,连操作双击我的电脑的这么一个步骤进入到我的电脑的盘符列表界面都要等上十几秒中。
后来在百度N遍不放弃的态度的搜索和过滤后,最终确认了之前我多次怀疑的问题。就是服务器的可用内存过小导致的服务器里的各种程序应用不能正常运行的问题。之前只是怀疑,因为每次出现这种卡顿故障,重启一下服务器就可以恢复了。之前也百度过多遍,但是一直没有查到比较官方的理由依据。下图就是微软官方的证明了。
微软官方网站对该问题的描述
引起卡顿的原因及其症状
症状:telnet服务器,网络正常,但是就是不能远程桌面
症状2:任务管理器查看可用内存几乎为0了
接下来我就根据官网上的所说的步骤来验证存在这个问题,如下:
1、通过网址http://technet.microsoft.com/en-us/sysinternals/ff700229下载SysInternals RamMap 工具进行查看缓存是否存在持续不断增长中。
通过SysInternals RamMap 工具查看缓存是否持续增长
2、再一步使用服务器自带的工具进行查证是否存在这个问题。
找到系统自带的性能监视器
添加缓存计数器监视1
添加缓存计数器监视2(找到system cache bytes,点击添加)
做完上面的步骤后就可以看到缓存是不是一直增加了,由于我的服务器的截图是重启后的截图了,所以没有呈现到一直增大的趋势图。(因为当时服务器已经卡到没有办法动了,只能重启了)
服务器重启后的截图
如果有问题的话应该是显示如下图的样子。
性能监视器下缓存不停增加的证据图
然后,就要解决这个问题了;
1、从微软网站下载一个叫 Microsoft windows Dynamic Cache Service 的工具;但是我尝试微软官网的这个下载网址都无法正常下载,只是能看到下图的这个界面,点击进去却无法打开。后来通过百度在其他网址找到了Microsoft Windows Dynamic Cache Service这个工具。
官网这个download下载不了
这个工具的文件结构目录(大小为1.3M左右)
2、根据自己服务器的操作系统是32位(在下载的文件的I386文件夹目录下复制DynCache.exe文件)还是64位(在下载的文件的AMD64文件夹目录下复制DynCache.exe文件)到相应的目录下复制复制工具中的DynCache.exe文件到服务器操作系统盘的system32文件夹的根目录下。
3、通过命令行窗口生成服务。
输入以下命令(注意=和值之间一定要有空格):
sc create DynCache binpath= %SystemRoot%System32DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
输入命令
命令执行完后会提示成功,并且在服务这里可以看到这个服务
4、双击执行已下载下来的的文件夹里的注册文件DynCache.reg。
导入注册表信息
5、在注册表中找到MaxSystemCacheMBytes(位置HKEY_LOCAL_macHINESYSTEMCurrentControlSetServicesDynCacheParameters ),双击它,选择“十进制”,在数值里输入要限制最大的缓存数(单位是MB),输入800就是限制缓存最大为800MB,输入0为不限制。
在注册表中更新最大缓存值为800(原值为0的,是不限制的)
6、重启服务器后就生效了。因为注册表修改后需要重新启动计算机之后才会生效,不重启之前应用的是修改之前的方案。
7、如果后期需要停用这个改变的话,可以在“命令提示符”中依次输入sc stop DynCache —— 回车 —— sc delete DynCache —— 回车,然后重启服务器就可以停用了。