一種動環監控主機的內核內存監控方法與流程
2023-10-06 09:34:19
![](http://img.xjishu.com/img/zl/2017/10/1323477406149.gif)
本發明涉及模塊化數據中心mdc、通信機房等領域,具體地說是一種動環監控主機的內核內存監控方法。
背景技術:
模塊化數據中心(moduledatacenter,mdc)是基於雲計算的新一代數據中心部署形式,為了應對雲計算、虛擬化、集中化、高密化等伺服器發展的趨勢,其採用模塊化設計理念,最大程度的降低基礎設施對機房環境的耦合。集成了供配電、製冷、機櫃、氣流遏制、綜合布線、動環監控、消防等子系統,提高數據中心的整體運營效率,實現快速部署、彈性擴展和綠色節能。
linux作業系統內核空間和用戶空間頁表的管理方式不同,具體來說,每個進程都有不同的用戶空間頁表,而內核對於訪問內存時需要的頁表是單獨進行管理的,有單獨的內核頁表,進程的頁表會與內核主頁表進行同步,所有進程共享linux的內核空間。
現有技術的技術方案,主要是通過shell腳本實現,一般的操作流程如下:
1)使用free命令查看linux系統內存使用情況;
2)查看截取剩餘內存free的數值命令;
3)編寫內存監控的腳本文件;
4)以文本文件的方式保存結果;
5)查看內存監控的結果文件。
目前已經存在的腳本可以對內存進行檢測和監控,但是基本都是針對用戶空間的,由於內核空間運行於特權級別,所以操作起來更加困難。此外,動態分析內核空間的工具中大多數針對的是內存洩露,溢出等常見錯誤的檢測,缺乏對內存訪問信息的監控工具。
技術實現要素:
本發明的技術任務是提供一種動環監控主機的內核內存監控方法。
本發明的技術任務是按以下方式實現的,該方法要求linux內核是模塊化的,支持模塊的動態插入;該方法主要由核心模塊、內核內存訪問信息監控模塊、內核內存溢出檢測模塊、內核內存統計信息模塊和界面統一展示模塊實現;
所述的核心模塊是基礎模塊,會捕獲所監控內核內存的全部訪問,並提供訪問處理接口和管理監控內存的接口;
所述的內核內存訪問信息監控模塊對所監控內存的所有訪問都進行具體判斷處理;
所述的內核內存溢出檢測模塊檢測linux內核模塊的動態內存訪問越界的問題;
所述的內核內存統計信息模塊用於統計讀寫操作、進程、用戶信息;
所述的界面統一展示模塊用於通過圖形化界面展現監控結果,實時監控訪問內存信息。
所述的核心模塊對外提供兩類接口,一類註冊或註銷的接口,用來註冊或者註銷監控模塊的接口;另一類添加或刪除監控內存的接口,用來控制所要監控的內存模塊的範圍。
所述的內核內存監控方法的步驟如下:
1)向核心模塊動態添加內核內存訪問信息監控模塊;
2)向核心模塊動態添加內核內存溢出檢測模塊;
3)向核心模塊動態添加內核內存統計信息監控模塊;
4)向核心模塊成功註冊後,內核內存訪問信息監控模塊利用通知機制等待訪問內存;
5)內核內存訪問,向核心模塊添加需要監控檢測內存信息,對於特別危險的行為設置強制結束;
6)進程產生缺頁異常;
7)判斷是否因監控引起的缺頁異常;
8)否,系統正常處理;
9)是,進入內核內存訪問信息監控模塊進行處理;
10)根據當前寄存器的信息和當前的進程控制塊current來記錄進程的訪問信息;
11)設置頁表項pte為頁存在狀態;
12)修改標誌寄存器為單步調試;
13)內核內存正常訪問;
14)產生單步中斷,然後通知機制會通知內核內存溢出檢測模塊,啟動內核內存溢出檢測模塊;
15)複製可執行代碼到內核空間,內核內存溢出檢測模塊做預處理,隨後繼續執行初始化函數;
16)內核內存溢出檢測的主要方法是在申請內存塊的時候,增加申請內存的大小,將這些申請額外的空間作為檢測區域;然後向核心模塊添加這個較大的內存塊;當訪問該內存塊時,通過判斷是否訪問到了邊界區域來確定是否發生了內存越界訪問;
17)進入內核內存訪問信息監控模塊,設置頁表項pte為缺頁狀態,恢復標誌寄存器;
18)進入內核內存統計信息模塊,對於同一個進程,信息只記錄一份,包括對該內存的讀、寫次數,訪問時間;
19)可視化界面統一展示模塊讀取內核內存監控結果,並在用戶空間進行呈現;
20)重複(5)~(19)步驟,完成循環監控過程。
本發明的一種動環監控主機的內核內存監控方法和現有技術相比,有助於動環監控主機的linux調試,尤其是在涉及底層驅動代碼調試時,可以快速定位程序的內存訪問位置,有利於開發及調試中深層次問題的定位,提升動環監控主機的穩定性與可靠性,並保障業務系統的穩定、可靠運行。
附圖說明
附圖1為一種動環監控主機的內核內存監控方法的系統架構圖。
附圖2為一種動環監控主機的內核內存監控方法的流程示意圖。
具體實施方式
實施例1:
該方法要求linux內核是模塊化的,支持模塊的動態插入;該方法主要由核心模塊、內核內存訪問信息監控模塊、內核內存溢出檢測模塊、內核內存統計信息模塊和界面統一展示模塊實現;
所述的核心模塊是基礎模塊,會捕獲所監控內核內存的全部訪問,並提供訪問處理接口和管理監控內存的接口;所述的核心模塊對外提供兩類接口,一類註冊或註銷的接口,用來註冊或者註銷監控模塊的接口;另一類添加或刪除監控內存的接口,用來控制所要監控的內存模塊的範圍。
所述的內核內存訪問信息監控模塊對所監控內存的所有訪問都進行具體判斷處理;
所述的內核內存溢出檢測模塊檢測linux內核模塊的動態內存訪問越界的問題;
所述的內核內存統計信息模塊用於統計讀寫操作、進程、用戶信息;
所述的界面統一展示模塊用於通過圖形化界面展現監控結果,實時監控訪問內存信息。
所述的內核內存監控方法的步驟如下:
1)向核心模塊動態添加內核內存訪問信息監控模塊;
2)向核心模塊動態添加內核內存溢出檢測模塊;
3)向核心模塊動態添加內核內存統計信息監控模塊;
4)向核心模塊成功註冊後,內核內存訪問信息監控模塊利用通知機制等待訪問內存;
5)內核內存訪問,向核心模塊添加需要監控檢測內存信息,對於特別危險的行為設置強制結束;
6)進程產生缺頁異常;
7)判斷是否因監控引起的缺頁異常;
8)否,系統正常處理;
9)是,進入內核內存訪問信息監控模塊進行處理;
10)根據當前寄存器的信息和當前的進程控制塊current來記錄進程的訪問信息;
11)設置頁表項pte為頁存在狀態;
12)修改標誌寄存器為單步調試;
13)內核內存正常訪問;
14)產生單步中斷,然後通知機制會通知內核內存溢出檢測模塊,啟動內核內存溢出檢測模塊;
15)複製可執行代碼到內核空間,內核內存溢出檢測模塊做預處理,隨後繼續執行初始化函數;
16)內核內存溢出檢測的主要方法是在申請內存塊的時候,增加申請內存的大小,將這些申請額外的空間作為檢測區域;然後向核心模塊添加這個較大的內存塊;當訪問該內存塊時,通過判斷是否訪問到了邊界區域來確定是否發生了內存越界訪問;
17)進入內核內存訪問信息監控模塊,設置頁表項pte為缺頁狀態,恢復標誌寄存器;
18)進入內核內存統計信息模塊,對於同一個進程,信息只記錄一份,包括對該內存的讀、寫次數,訪問時間;
19)可視化界面統一展示模塊讀取內核內存監控結果,並在用戶空間進行呈現;
20)重複(5)~(19)步驟,完成循環監控過程。
通過上面具體實施方式,所述技術領域的技術人員可容易的實現本發明。但是應當理解,本發明並不限於上述的幾種具體實施方式。在公開的實施方式的基礎上,所述技術領域的技術人員可任意組合不同的技術特徵,從而實現不同的技術方案。