Windows服務器高物理內存佔用問題排察【伴隨黑客攻擊】

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

同事找到我說:“我們有一臺服務器,內存資源持續高位運行,經常浮動在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系統補丁,故障消失,至此故事完結!

然而工作並未結束,這裏僅僅說明了一種服務器內存被佔用的情況說明,上面我還列舉了其它情況並沒有說明,不是什麼情況都能馬上遇到

但是我已經在你的心中種下了一顆種子,當你遇到狂風暴雨時耳邊可能會響起 他說風雨中這點痛算什麼...

問題終究會被發現的,否則就是你的方法不對,記住方法與工具同樣重要,再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章