最近一段時間,我總是遇到服務器用一段時間后就會卡頓!具體表現為客戶端的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 —— 回車,然后重啟服務器就可以停用了。