Windows伺服器高實體記憶體佔用問題排察【伴隨駭客攻擊】

2023-03-30 18:01:05

我經常在手中拿著一個記憶體條手鍊,以彰顯我是計算機深入挖掘專家,它就是一個象徵,類似摸金符,有它代表你有資格可以探墓了。

同事找到我說:「我們有一臺伺服器,記憶體資源持續高位執行,經常浮動在80%左右,系統重啟後會好一些,不過持續不了太久。」

伺服器是雲伺服器:8G記憶體,發生問題時,大約5GB記憶體消失了,但合計所有程序的記憶體工作集也不到3G,消失的記憶體何在?

好吧,進入遠端登入看看實際情況吧

在工作管理員與Process Explorer中將所有程序工作集排序並彙總後,得到的結果就是我們沒有任何程式使用這麼大的記憶體

 不及格的程式設計師-八神

 不及格的程式設計師-八神

 發生這種奇怪詭異的事情在Windows已經見怪不怪了,因為【工作管理員】不是理想的記憶體探察器,有些系統記憶體資源它是感知不到的,你不能指望它來計算系統正在使用的記憶體,除非你想掉入無止盡的黑洞時間,到頭來一場空,浪沸大量人生。

有經驗的Windows運維專家到這裡就會知道,如果上面沒有你想要的結果,那麼這背後可能有不可告人的祕密在發生,來自下面幾個原因之一:

1 Sql Server 記憶體緩衝池,SqlServer如果客戶請求量巨大,它會吞掉你所有可用實體記憶體,直到系統到崩潰的邊緣。

2 Hyper-V虛似機 Dynamic Memory 佔用記憶體

3 某些系統驅動程式記憶體漏失(如:某個版本的Ati catalyst control center,或是某個品牌的網路卡驅動程式)

4 第三方大型伺服器程式:Logitech Media Server

我們使用正確的工具軟體是探察這些問題的先決條件,要有好的羅盤,口決,驢踢子

到微軟網站下載RAMMap, VMMap ,借用這兩個軟體我發現Sql Server偷偷佔用大量的記憶體,下圖只是例子:如果你看到了滿屏黃色條狀private Data,恭喜。

進入資料庫的記憶體設定頁面,將最大記憶體調整到較小的數值,系統記憶體的壓力立杆見影,馬上就下降了,由此斷定此問題正是SQLServer觸發的。

如何設定這個最大伺服器記憶體是個技術活,因為系統上還有許多程式需要大量記憶體,除非你這臺伺服器就SqlServer獨佔資源,你可以將90%的記憶體給它用。

需要注意:

  設定最大伺服器記憶體,不代表SqlServer申請記憶體資源不會超過這個數值,它只是快取資料池的記憶體大小,SqlServer還有許多佔用記憶體的元件是不包含在內的
有時你會懷疑我明明設定了最大伺服器記憶體,為什麼在資源管理下看到SQLServer申請的記憶體已經超過此值,你沒看錯,SqlServer是記憶體大戶,記憶體池只是它需要用的一部分,多數資料庫都有一個成名祕技就是減少磁碟IO,代價就是更多的記憶體。

經過上面分析,告之同事要麼升級記憶體購買更多,要麼忍著,並將最大服務記憶體適當調低些。

找幾個倒黴的客戶程式,在程式碼裡多加幾個Sleep,當它們覺得慢的受不了時,你告之需要升級系統資料庫了,原因你們的資料大到伺服器快裝不下了。。。

補充內容:

問題來自另一臺伺服器, 是某客戶獨佔的,只有一個IIS站點,一個SqlServer範例,該客戶每日上傳的資料百萬左右,資料庫時常報錯如下:

資源池‘ default’ 沒有足夠的系統記憶體來執行此查詢

運維同事之後將資料庫的最大伺服器記憶體調整到一個小的值,SqlServer預設會消耗到它所能找到的所有系統記憶體,所以每臺裝有SQLServer的伺服器在安裝後會應設定一個合適的數值,來配合系統的執行。但是在設定之後卻不知道這些記憶體佔用並不在【工作管理員】中顯示,所以引來了它的疑惑,並找到了我。

好吧,我承認,這不是第一次找我了,就在前些日子這個伺服器的資料庫經常崩潰,經常出現如下錯誤

 

 

這種錯誤大家也許經常會在網路上看到,引起這個故障的原因可能是多樣的,在我這裡也不例外,2個星期內我們一直圍繞在資料檔案格式問題打轉,可問題一直在持續,客戶經常打電話到客服那報怨,花了的錢並不值當,稱我們服務質量簡直垃圾一樣,天天煩到它們了。
直到我冥思苦想後終於找到罪魁禍首,直指Windows Remote DeskTop漏洞。

終其原因是系統受到多次攻擊,導致系統BOSD死亡藍屏,由於是雲伺服器,系統自動重啟,SQLSever資料庫不能正常啟動。

為什麼會有這樣的攻擊呢,因為駭客通過此手段可以得到計算機的控制權,達到做任何事情,無利不起早。你們(駭客們)都給我低調點兒

上面的錯誤提示讓我受到啟發:Sqlserver的紀錄檔和系統紀錄檔中的其它資訊可能提供了更詳細資訊。。。。

系統紀錄檔中提到 重啟證據,當時開始懷疑機房最近供電有些不足,哈哈,怎麼人不都是這樣的嗎?

 後來又看到這個報錯,也許能洗清我對機房的汙衊 

 

 

 系統藍屏後給出Windows系統核心轉儲檔案,真是太棒了,拿到轉儲用WinDBG簡單看一下就知道是受到BlueKeep攻擊了,下面是Dump的 棧回溯

不及格的程式設計師-八神

 

 紅框之處正是遠端桌面的驅動程式呼叫所在最後死在了藍屏裡,升級最新Windows系統修補程式,故障消失,至此故事完結!