專利名稱:一種內存監(jiān)控的方法和裝置的制作方法
技術領域:
本發(fā)明涉及計算機網(wǎng)絡通信領域,尤其涉及一種內存監(jiān)控的方法和裝置。
背景技術:
目前,計算機系統(tǒng)以及一些網(wǎng)絡設備的內存不管容量有多大,均是有限的,因此有效的應用這些內存是一個十分重要的問題。
現(xiàn)有技術中通常采用的內存管理的結構如圖1所示,其中,內存管理通常
采用雙層管理的方式,具體包括
第一層管理頁分配器101將物理內存切割成一定長度的內核內存頁,并管理該內核內存頁,才艮據(jù)申請內存的實體的類別將系統(tǒng)中的內存劃分到多個緩沖池中進行管理。
第二層管理Slab分配器102將緩沖池所包含的緩沖區(qū)劃分為多個Slab(是一種數(shù)據(jù)結構),Slab是由一個或多個(2N)連續(xù)頁(頁為內存的單元)組成的slab鏈條,另外,每個slab所包含的多個連續(xù)頁作為一個整體被分為多個對象單元(也可稱為對象體)。
有時候在系統(tǒng)中會出現(xiàn)內存泄露問題,內存泄漏并非指內存在物理上的消失,而是應用程序(即申請和使用內存的實體)在分配某段內存后,由于程序設計上的錯誤,如未設計釋放或者是主觀認為不必處理等原因,失去了對該,爻內存的控制,因而造成了內存的浪費。
另外還存在一種"隱式"內存泄漏,主要表現(xiàn)為
現(xiàn)象一程序的一個線程不斷分配內存,并將指向內存的指針保存在一個數(shù)據(jù)存儲中(如list),但是在程序運行過程中, 一直沒有任何線程進行內存釋放。當程序退出的時候,該數(shù)據(jù)存儲中的指針值所指向的內存塊被依次釋放。
5現(xiàn)象二程序的N個線程進行內存分配,并將指針傳遞給一個數(shù)據(jù)存儲,由M個線程從數(shù)據(jù)存儲進行數(shù)據(jù)處理和內存釋放。由于N遠大于M,或者M個線程數(shù)據(jù)處理的時間過長,導致內存分配的速度遠大于內存被釋放的速度。但是在程序退出的時候,數(shù)據(jù)存儲中的指針值所指向的內存塊被依次釋放。如果在使用內存的過程中存在上述現(xiàn)象則會導以下問題問題(l)內存泄露通過開發(fā)人員檢查代碼難以分析出來,邏輯上不易判
斷;
問題(2)有時, 一次內存泄露僅有很小的幾個字節(jié),這種情況下,內存泄露需要較長時間的運行之后才能夠體現(xiàn)出來。
但無論哪種情況的內存泄露,在用戶實際的網(wǎng)絡環(huán)境中都會導致可用內存量不斷降低,導致系統(tǒng)最終無法運行,系統(tǒng)崩潰。
在現(xiàn)有技術中有部分網(wǎng)絡管理工具,如簡單網(wǎng)絡管理協(xié)議(Simple NetworkManger Protocol, SNMP)工具可以對設備內存進行查看,但僅限于產(chǎn)品支持的MIB (Management Information Base ),獲取到的值多凄史為內存利用率狀態(tài),如下圖IA所示。
圖1A所顯示的內容是通過SNMP工具讀取的內存MIB信息,輸出結果為內存利用率,能夠看到內存使用的綜合結果,但是該方法仍存在一些問題,如以下提出的問題(3):
問題(3)該方法不能清晰的確認是否已經(jīng)出現(xiàn)了內存泄漏等系統(tǒng)資源使用異常問題。
另外,現(xiàn)有技術中也有一些是使用代碼插樁的檢測方法,但會導致系統(tǒng)運行性能大大降低;并且該類檢測方法都形成為大型的商業(yè)軟件,成本代價較高。
問題(4)目前網(wǎng)絡設備系統(tǒng)上提供了一種查看接口,如show memory,但僅是信息的羅列,信息量相對比較龐大,列出了所有的任務內存使用情況,列出了不同大小字節(jié)類型的使用情況,列出了內存不同緩沖池使用情況,不明確,也不直觀。在該類軟件產(chǎn)品測試過程中,需要不斷的進行show memory類內存信息查看和比對,其中比對內存包括重點關注的字節(jié)數(shù)統(tǒng)計值,各個重 點功能協(xié)議內存利用統(tǒng)計值,很容易遺漏,觀察面不齊備,難以兼顧,效果不 是很好。
發(fā)明內容
本發(fā)明提供一種內存監(jiān)控的方法和裝置,用于解決現(xiàn)有技中不能及時有 效的獲知內存泄露顯現(xiàn)的問題。
一種內存監(jiān)控的方法,對使用內存的實體進行內存使用情況監(jiān)控,待監(jiān)
控實體的內存使用情況數(shù)據(jù)存儲在設定的存儲單元中,該方法包括
在一個監(jiān)控周期內,從所述存儲單元中多次獲取待監(jiān)控實體的內存使用 情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;
如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總 數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。
一種內存監(jiān)控的方法,對使用內存的緩沖池進行內存使用情況監(jiān)控,待 監(jiān)控緩沖池的內存使用情況數(shù)據(jù)存儲在設定的存儲單元中,該方法包括
在一個監(jiān)控周期內,從所述存儲單元中多次獲取待監(jiān)控緩沖池的內存使 用情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;
如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總 數(shù)多,則確定所述緩沖池存在內存泄露現(xiàn)象。
一種內存監(jiān)控的裝置,對使用內存的實體進行內存使用情況監(jiān)控,包括
抽樣模塊,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單元 中多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù);
比較模塊,用于將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較,如果 每次得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù)多,貝'J 確定所述實體存在內存泄露現(xiàn)象。
一種內存監(jiān)控的裝置,對緩沖池進行內存使用情況監(jiān)控,包括抽樣模塊,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單
元中多次獲取待監(jiān)控緩沖池的內存使用情況數(shù)據(jù);
比較模塊,用于將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較,如果 每次得到的比較結果都是后一次比前一次所述緩沖池使用內存的總數(shù)多, 則確定所述緩沖池存在內存泄露現(xiàn)象。通過本發(fā)明實施例所提供的方法和 裝置,通過周期性的獲取某個使用內存的實體的內存使用情況數(shù)據(jù),從而 能夠有效監(jiān)控系統(tǒng)內存泄露現(xiàn)象,另外,在獲取內存使用情況數(shù)據(jù)的同時 還設置一定的外部操作,使得抽取到的內存使用情況數(shù)據(jù)能夠更為明顯的 體現(xiàn)內存泄露問題,因此本發(fā)明實施例所提供的方法能夠大大縮短內存泄 露問題發(fā)現(xiàn)周期。
圖1為現(xiàn)有技術中內存管理的結構圖1A為現(xiàn)有技術中網(wǎng)絡管理協(xié)議工具對設備內存進行查看時的內存使用 情況示意圖2為本發(fā)明實施例一種內存監(jiān)控方法的流程圖; 圖2A為本發(fā)明一種內存監(jiān)控方法的實施例1的流程圖; 圖3為本發(fā)明一種內存監(jiān)控方法的實施例2的流程圖; 圖4為現(xiàn)有技術中利用show pool命令顯示的各緩沖池和實體對應關系和 內存使用情況示意圖5本發(fā)明實施例^t是供的一種內存監(jiān)控裝置的結構圖6本發(fā)明實施例針對實施例1所提供的一種內存監(jiān)控裝置的結構圖。
具體實施例方式
本發(fā)明實施例提供一種內存監(jiān)控的方法和裝置,對使用內存的實體進行內 存使用情況監(jiān)控,待監(jiān)控實體的內存使用情況數(shù)據(jù)存儲在設定的存儲單元中,所述待監(jiān)控實體的內存使用情況數(shù)據(jù)隨著待監(jiān)控實體的內存使用情況變化,該
方法包括在一個監(jiān)控周期內,從所述存儲單元中多次獲取待監(jiān)控實體的內存 使用情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;如杲每次 得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù)多,則確定所述 實體存在內存泄露現(xiàn)象。
如圖2所示,本發(fā)明實施例一種內存監(jiān)控的方法,對使用內存的實體進行 內存使用情況監(jiān)控,具體實現(xiàn)方法包括步驟:
步驟201,在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單元中 多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù),所述待監(jiān)控實體的內存使用情 況數(shù)據(jù)隨著待監(jiān)控實體對內存的使用情況而變化。
步驟202,將連續(xù)兩次獲取到的所述實體的內存使用情況數(shù)據(jù)進行比 較,如杲每次得到的比較結果都是后一次比前一次所述實體使用內存的總 數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。
另外,當所述實體使用內存的總數(shù)沒有一直增長時,為了進一步的確定 所述實體是否出現(xiàn)內存泄漏現(xiàn)象,該方法還進一步包括
步驟203,如果得到的比較結果是后一次所述實體使用內存的總數(shù)不大 于前一次所述實體使用內存的總數(shù),則將后一次獲取到的內存使用情況數(shù) 據(jù)與預先設置的實體使用內存的上限進行比較,如果比較結果為所述實體 使用內存的總數(shù)比所述預先設置的實體使用內存的上限多,則確定所述實 體存在內存泄露現(xiàn)象。
所述實體使用內存的上限依據(jù)各實體在實際環(huán)境運行中對內存的申請 數(shù)量、申請頻度和功能重要性動態(tài)生成。
如圖3所示,當所述內存使用情況數(shù)據(jù)標示的是被監(jiān)控實體在多個緩沖 池中使用內存的使用情況時,則在確定所述實體存在內存泄露現(xiàn)象后,本 發(fā)明實施例還進一步包括
步驟204,獲取所述被監(jiān)控實體在各緩沖池中申請的內存的使用情況數(shù)據(jù),并確定存在內存泄漏的緩沖池。
實施例1、如圖2A所示, 一種內存監(jiān)控的方法,對緩沖池進行內存使用 情況監(jiān)控,具體實現(xiàn)方法包括步驟
步驟2A01,在一個監(jiān)控周期內,從內存使用情況數(shù)據(jù)存儲單元中多次 獲取待監(jiān)控緩沖池的內存使用情況數(shù)據(jù),內存使用情況數(shù)據(jù)存儲單元中保 存有待監(jiān)控緩沖池的內存使用情況數(shù)據(jù),所述待監(jiān)控緩沖池的內存使用情 況數(shù)據(jù)隨著緩沖池內存的使用情況而變化。
步驟2A02,將連續(xù)兩次獲取到的所述緩沖池的內存使用情況數(shù)據(jù)進行 比較,如果每次得到的比較結果都是后一次比前一次所述緩沖池使用內存 的總數(shù)多,則確定所述緩沖池存在內存泄露現(xiàn)象。
另外,當所述緩沖池使用內存的總數(shù)沒有一直增長時,為了進一步的確 定所述緩沖池是否出現(xiàn)內存泄漏現(xiàn)象,該方法還進一步包括
步驟2A03,如果得到的比較結果是后一次所述實體使用內存的總數(shù)不 大于前一次所述緩沖池使用內存的總數(shù),則將后一次獲取到的內存使用情 況數(shù)據(jù)與預先設置的緩沖池使用內存的上限進行比較,如果比較結果為所 述緩沖池使用內存的總數(shù)比所述預先設置的緩沖池使用內存的上限多,貝'J 確定所述緩沖池存在內存泄露現(xiàn)象。
進一步,因為緩沖池中緩存多個實體使用的內存,為了進一步確定造成 內存泄漏的實體,該實施例還包括
步驟2A04,確定該緩沖池對應的實體,在一個監(jiān)控周期內,分別從內 存使用情況數(shù)據(jù)存儲單元中多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù)。
步驟2A05,將連續(xù)兩次獲取到的所述實體的內存使用情況數(shù)據(jù)進行比 較,如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總 數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。
另外,當所述實體使用內存的總數(shù)沒有一直增長時,為了進一步的確定 所述實體是否出現(xiàn)內存泄漏現(xiàn)象,該方法還進一步包括
10步驟2A06,如果得到的比較結果是后一次所述實體使用內存的總數(shù)不 大于前一次所述實體使用內存的總數(shù),則將后一次獲取到的內存使用情況 數(shù)據(jù)與預先設置的實體使用內存的上限進行比較,如果比較結果為所述實 體使用內存的總數(shù)比所述預先設置的實體使用內存的上限多,則確定所述 實體存在內存泄露現(xiàn)象。
實施例2,如圖3所示,在本發(fā)明實施例中可以將內存使用情況數(shù)據(jù)存儲 于結構體中,所述內存使用情況數(shù)據(jù)則用結構體變量值標示,而且在本實施例 中結構體變量值隨實體使用內存總數(shù)的增加而增加,則本發(fā)明實施例一種內存 監(jiān)控的方法,具體包括步驟
步驟301,通過預先設置的接口設置對象參數(shù)和監(jiān)控參數(shù),其中所述串口 可以是一個命令行界面(CLI, command-line interface)接口 ;
所述對象參數(shù)用于在存儲內存使用情況數(shù)據(jù)的結構體中定位標示所述實 體內存使用情況的結構體變量值,該對象參數(shù)具體包括被監(jiān)控實體的名稱(該 實體申請和使用內存)和該實體申請內存的緩沖池。
監(jiān)控參數(shù)包括抽樣周期(指在監(jiān)控過程中抽取內存使用數(shù)據(jù)的時間間隔) 和監(jiān)控周期(指一次監(jiān)控的時長)等。
在實際的使用中,通過CLI接口輸入的監(jiān)控參數(shù)具體形式可以是monitor [memory…][OSPF | BGP | LDP | NSM |…][[32 | 64 | 128 | 256…][time] [Long] [Endtime];
其中,monitor-^旨明監(jiān)控的目的,即做什么操作;[memory…]-指明進 行監(jiān)控內存信息;[OSPF I BGP I LDP | NSM | ...]—此處方括號內部是可選的, 即用于監(jiān)控哪些任務信息;[[32 I 64 I 128 | 256...]—此處方括號內部是可選的, 指明監(jiān)控哪些緩沖池;[time] [Long] [Endtime]—是時間參數(shù),用于指明監(jiān)控的 時間間隔,時長或者結束時間等信息。
步驟302,根據(jù)所述對象參數(shù)從存儲內存使用信息的結構體中獲取內存使 用情況的結構體變量值;當監(jiān)控對象是實體時,獲取的是所述實體的內存使用情況數(shù)據(jù),當監(jiān)控對象是緩沖池時,獲取的是所述緩沖池的內存使用情況數(shù)據(jù), 當同時指定了實體和緩沖池時,獲取的是所述實體使用所述緩沖池中內存的內 存使用情況數(shù)據(jù)。
在現(xiàn)有技術中,因為網(wǎng)絡設備的所有內存使用數(shù)據(jù)都儲存在系統(tǒng)平臺的一 個結構體中,其中,該結構體中保存監(jiān)控實體的名稱、實體申請內存的緩沖池 的名稱與所述標示實體內存使用情況的結構體變量值的對應關系,所述某個實 體(該實體可以是任務或者模塊)的內存使用情況數(shù)據(jù)則為一個具體的結構體
顯示接口 (現(xiàn)有技術中可以通過show pool命令顯示)顯示,顯示的內容可以 是如圖4所示的形式
在結構體中的數(shù)據(jù)包括各緩沖池的名字、使用該緩沖池的多個實體的名稱 等信息。
這些信息通過結構體進行保存,結構體中存儲數(shù)據(jù)的樣式可以是 typedef struct pool—stat_s {
char 任務名數(shù)組[MAX—TASK][BLOCK—NAME—LEN];
char 緩沖池名數(shù)組[MAX—POOL][CACHE—NAMELEN]; sizej 大小[MAX_POOL][MAX—TASK];
pool—using—t use[MAX—POOL][MAX—TASK]; /*用于保存中間臨
時變量/
} pool_stat—t;
在對象參數(shù)中設定了緩沖池的名稱和使用內存的實體的名稱,所以通過這 兩個參數(shù)則可從存儲內存使用情況數(shù)據(jù)的結構體中獲取標示該實體內存使用 情況的結構體變量值,其中,該內存使用情況數(shù)據(jù)標示該實體所使用的內存大 小。
步驟303,將當前獲取到的結構體變量值與保存的結構體變量值進行比較,如果當前獲取到的結構體變量值大于等于保存的結構體變量值,則應用當前獲
取的結構體變量值更新保存的內存結構體變量值,并轉入步驟304,否則轉入 步驟306;
步驟304,將比較結果標記為True,并將該比較結果存儲到預先設置的結 構體變量中。
步驟305,判斷監(jiān)控的總時長是否大于等于預先設置的監(jiān)控周期,如果是, 則輸出所述比較結果,并判定被監(jiān)控的實體存在內存泄露問題,否則在間隔一 個抽樣周期后執(zhí)行步驟302。
在本發(fā)明實施例中,將獲取的內存使用情況數(shù)據(jù)進行比較的具體實現(xiàn)方式 包括
將獲取到的歷史數(shù)據(jù)進行比較時,具體的實現(xiàn)方式包括
在Tl時刻獲取表示所述實體內存使用情況的數(shù)據(jù)1,間隔抽樣周期的T2 時刻獲取表示所述實體內存使用情況的數(shù)據(jù)2,將數(shù)據(jù)1和數(shù)據(jù)2都存儲在結 構體變量中,數(shù)據(jù)1存儲在預先設置的的結構體變量大小 [MAX一POOL][MAX一TASK]中,數(shù)據(jù)2可以存儲在結構體變量use [MAX—POOL] [MAX—TASK]中,將大小[MAX—POOL] [MAX—TASK]與use [MAX一POOL][MAX一TASK]進行比較,如果
大小[MAX一POOL][MAX_TASK]<= use [MAX一POOL][MAXJTASK]則存 儲比較結果為True,并將比較結果存放于BOOL變量中;
在間隔一個抽樣周期后的T3時刻獲取表示實體內存使用情況的數(shù)據(jù)3, 這時將 use [MAX_POOL] [MAX—TASK] 的值給大小 [MAX_POOL][MAX_TASK],將數(shù)據(jù)3存儲到use [MAX_POOL][MAX_TASK] 中,再次將大小[MAX—POOL][MAX—TASK]與use [MAX—POOL][MAX—TASK] 進行比較。
如果大小[MAX—POOL][MAX—TASK]>= use [MAX—POOL][MAX—TASK] 則存儲比較結果為False值,在本發(fā)明實施例中一旦更新BOOL為False,則終
13止比較。
在本發(fā)明實施例中確定結構體變量值位置的參數(shù)信息是組合形式,可以根
據(jù)監(jiān)控的需要設置監(jiān)控的具體信息,本系統(tǒng)則提取上述結構體"stat—s"中的參數(shù) 進行分析。如,可以對5分鐘時間內使用內存最多的或前三位的實體進行抽樣 監(jiān)控。
為了在上述方法的基礎上更為準確的檢測到內存泄露問題,在步驟303中 如果當前獲取到的內存使用情況數(shù)據(jù)小于保存的內存使用情況數(shù)據(jù),本發(fā)明實 施例還包括
步驟306,結束抽樣,將當前獲取到的標示所述實體內存使用情況的結構 體變量值與預設的閥值(L)進行比較,如果當前獲取到的結構體變量值大于 所述閥值(L),則確定所述實體存在內存泄露現(xiàn)象,其中,所述閥值是任一使 用內存的實體所能使用內存的上限值。
其中,所述閥值L動態(tài)生成,生成辦法是依據(jù)各個實體實際環(huán)境運行對內 存的申請多少、申請頻度和模塊的功能重要性等來決定,如OSPF模塊在網(wǎng)絡 環(huán)境中相對比較重要,決定數(shù)據(jù)流的轉發(fā)行為,1千條路由同時申請內存時需 要3M內存空間,再根據(jù)設備上形成鄰居數(shù),如5K路由和50鄰居規(guī)模,則這 1千條路由同時申請約需要20M空間,再將20M空間乘以預留因子1.1 (可能 還會有一些其他因素的影響),最終確定為22M;
相同的1K條BGP的vpn4路由則需要約384K ( (128*2+128*鄰居數(shù))*路 由數(shù))內存空間,另外1K條BGP的vpn4路由的申請的內存空間還受限于設 備上的虛擬路由轉發(fā)(vrf, Virtual Routing Forwarding)實體數(shù)量,根據(jù) 這些因素計算網(wǎng)絡規(guī)模100K需要內存約為40M,乘以預留因子1.1,即定義 為44M。
另外為了能及早的通知用戶系統(tǒng)中出現(xiàn)的內存泄露問題,本發(fā)明實施例還 包括步驟
307,根據(jù)設定的告警方式和格式對所述內存泄露問題進行告警。其中,告警的方式包括以web系統(tǒng)的短消息方式、在網(wǎng)絡設備的液晶屏 上進行信息告警顯示、通過各控制終端的追蹤(trap )信息以及記錄日志(log ) 的形式等方式??梢赃x擇多個形式并存的方式進行告警。另外在告警信息中可 以給出申請非法或者申請超過預定閥值,內存申請異常,當前值是多少等信息。
進一步,為了縮短發(fā)現(xiàn)內存泄露問題的時間,本發(fā)明實施例所提供的方法, 在獲取內存使用情況數(shù)據(jù)的時候,還為該方法的具體實現(xiàn)提供一定的外部條 件,具體包括
A, 對于如協(xié)議類ospf任務的監(jiān)控,在指定的時間內,進行多次(如10 次)路由的公告和撤銷操作,其中,公告和撤銷的路由數(shù)量可設置為1K條, 通過上述多次的路由公告和撤銷操作,則使結構體中保存的該任務的內存使用 情況數(shù)據(jù)出現(xiàn)明顯的變化,從而通過上述內存監(jiān)控的方法則可觀察到該任務對 其占用緩沖池內存空間的操作,即內存的申請和釋放行為。這種情形下,如果 指定時間內內存持續(xù)增加的增量從未減少過,即上述BOOL變量的值一直存儲 的是True,則確定該監(jiān)控對象出現(xiàn)了內存泄露;
B, 對于如協(xié)議類ospf任務的監(jiān)控,通過一次性將公告的路由數(shù)量值設置 到最大,如一次公告100K(設備容限為IOOK),然后將其撤銷,較短時間間 隔(如3分鐘),再次進行該路由公告,如此反復多次(如10次),如果BOOL 變量參數(shù)為False,多次操作后實際占用內存空間的增長值大于了預期閥值L, 則確定ospf任務出現(xiàn)了內存泄露現(xiàn)象。
如圖5所示,根據(jù)上述方法,對使用內存的實體進行內存使用情況監(jiān)控, 本發(fā)明實施例還包括一種內存監(jiān)控的裝置,具體包括抽樣模塊501、比較模 塊502,其中,
抽樣模塊501,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存 儲單元中多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù),所述待監(jiān)控實體的內 存使用情況數(shù)據(jù)隨著待監(jiān)控實體的內存使用情況變化;
比較模塊502,用于將連續(xù)兩次獲取到的內存使用情 數(shù)據(jù)進行比較,如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù) 多,則確定所述實體存在內存泄露現(xiàn)象。
另外當所述實體使用內存的總數(shù)沒有 一直增長時,為了進一 步的確定所
述實體是否出現(xiàn)內存泄漏現(xiàn)象,則所述比較模塊502還用于如果得到的比 較結果是后一次所述實體使用內存的總數(shù)比前一次少,則將后一次獲取到 的內存使用情況數(shù)據(jù)與預先設置的實體使用內存的上限進行比較,如果比 較結果為后一次所述實體使用內存的總數(shù)比所述實體使用內存的上限多, 則確定所述實體存在內存泄露現(xiàn)象。
為了將系統(tǒng)中的內存泄漏問題及時的告知用戶,本發(fā)明裝置還包括 告警模塊503,用于根據(jù)設定的告警方式和格式對所述內存泄露現(xiàn)象進行 告警。
并且,該告警模塊通過以下方式中的一種或幾種的組合進行告警 web系統(tǒng)的短消息方式、在網(wǎng)絡設備的液晶屏上進行信息告警顯示、通
過各控制終端的追蹤(trap)信息以及記錄日志(log)的形式等方式。
如圖6所示,針對圖2A所提供的方法本發(fā)明實施例還提供一種內存監(jiān)
控的裝置,對緩沖池進行內存使用情況監(jiān)控,該裝置包括抽樣模塊601和比
較模塊602:
抽樣模塊601,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存 儲單元中多次獲取待監(jiān)控緩沖池的內存使用情況數(shù)據(jù);
比較模塊602,用于將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較, 如果每次得到的比較結果都是后一次比前一次所述緩沖池使用內存的總數(shù) 多,則確定所述緩沖池存在內存泄露現(xiàn)象。
其中,當比較結杲都是后一次比前一次所述緩沖池使用內存的總數(shù)少 時,為了進一步的確定該緩沖池是否存在內存泄漏現(xiàn)象,所述比較模塊602 還用于將后一次獲取到的內存使用情況數(shù)據(jù)與預先設置的緩沖池使用內存 的上限進行比較,如果比較結果為所述緩沖池使用內存的總數(shù)比所述預先設置的緩沖池使用內存的上限多,則確定所述緩沖池存在內存泄露現(xiàn)象。
進一步,在確定某個緩沖池存在內存泄漏問題后,需要確定緩沖池中某
個實體導致內存泄漏現(xiàn)象,則該裝置還包括實體監(jiān)控模塊603;
所述實體監(jiān)控模塊603,用于確定該緩沖池對應的多個實體,并分別對 各實體對該緩沖池的內存使用情況進行監(jiān)控;在一個監(jiān)控周期內,從存儲 內存使用情況數(shù)據(jù)的存儲單元中多次獲取各實體對應該緩沖池的內存使用 情況數(shù)據(jù),并將各實體連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;如 果其中有實體每次得到的比較結果都是后一次比前一次使用內存的總數(shù) 多,則確定所述實體存在內存泄露現(xiàn)象。
通過本發(fā)明實施例所提供的方法和裝置,周期性的獲取某個使用內存的實 體的內存使用情況數(shù)據(jù),從而能夠有效監(jiān)控系統(tǒng)內存泄露現(xiàn)象,另外,在獲取 內存使用情況數(shù)據(jù)的同時還設置一定的外部操作,使得抽取到的內存使用情況 數(shù)據(jù)能夠更為明顯的體現(xiàn)內存泄露問題,因此本發(fā)明實施例所提供的方法能夠 大大縮短內存泄露問題發(fā)現(xiàn)周期。
因為本發(fā)明實施例所提供的方法是預先確定監(jiān)控的實體,所以在確定出現(xiàn) 內存泄露問題則可直接定位到造成內存泄露的模塊。
本發(fā)明實施例還提供監(jiān)控緩沖池內存使用情況的方法和裝置,用戶可以從 不同的途徑監(jiān)控內存系統(tǒng)中出現(xiàn)的內存泄漏問題。
另外本方法不需要借助外部測試設備,由被測設備系統(tǒng)實現(xiàn),成本較低; 能夠及時、直觀、形象輸出系統(tǒng)哪些任務模塊、哪些字節(jié)等出現(xiàn)了內存泄露, 還能夠監(jiān)控和發(fā)現(xiàn)內存使用不合理的模塊。
員根據(jù)本發(fā)明的技術方案得出其它的實施方式,同樣屬于本發(fā)明的技術創(chuàng)新范
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及 其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。
權利要求
1、一種內存監(jiān)控的方法,對使用內存的實體進行內存使用情況監(jiān)控,其特征在于,待監(jiān)控實體的內存使用情況數(shù)據(jù)存儲在設定的存儲單元中,該方法包括在一個監(jiān)控周期內,從所述存儲單元中多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。
2、 如權利要求l所述的方法,其特征在于,如果得到的比較結果是后 一次所述實體使用內存的總數(shù)不大于前一次所述實體使用內存的總數(shù),則 該方法進一步包括將后 一次獲取到的內存使用情況數(shù)據(jù)與預先設置的實體使用內存的上 限進行比較,如果比較結果為所述實體使用內存的總數(shù)比所述預先設置的 實體使用內存的上限多,則確定所述實體存在內存泄露現(xiàn)象。
3、 如權利要求1 2任一權項所述的方法,其特征在于,在確定所述實體 存在內存泄露現(xiàn)象之后,進一步包括根據(jù)設定的告警方式和格式對所述內存泄露現(xiàn)象進行告警。
4、 如權利要求1 2任一權項所述的方法,其特征在于,當所述內存使 用情況數(shù)據(jù)標示的是被監(jiān)控實體在多個緩沖池中申請的內存的使用情況 時,則在確定所述實體存在內存泄露現(xiàn)象后進一步包括分別獲取所述被監(jiān)控實體在所述多個緩沖池中申請的內存的使用情況 數(shù)據(jù),并根據(jù)該使用情況數(shù)據(jù)確定存在內存泄漏的緩沖池。
5、 一種內存監(jiān)控的方法,對緩沖池進行內存使用情況監(jiān)控,其特征在于, 待監(jiān)控緩沖池的內存使用情況數(shù)據(jù)存儲在設定的存儲單元中,該方法包括在一個監(jiān)控周期內,從所述存儲單元中多次獲取待監(jiān)控緩沖池的內存使 用情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總 數(shù)多,則確定所述緩沖池存在內存泄露現(xiàn)象。
6、 如權利要求5所述的方法,其特征在于,如果得到的比較結果是后 一次所述緩沖池使用內存的總數(shù)不大于前一次所述緩沖池使用內存的總 數(shù),則該方法進一步包括將后 一次獲取到的內存使用情況數(shù)據(jù)與預先設置的緩沖池使用內存的 上限進行比較,如果比較結果為所述緩沖池使用內存的總數(shù)比所述預先設 置的緩沖池使用內存的上限多,則確定所述緩沖池存在內存泄露現(xiàn)象。
7、 如權利要求5或6任一權項所述的方法,其特征在于,所述緩沖池 中緩存多個實體使用的內存,則該方法進一步包括確定該緩沖池對應的多個實體,并分別對各實體對該緩沖池的內存使用 情況進行監(jiān)控;在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單元中多次獲取各 實體對應該緩沖池的內存使用情況數(shù)據(jù),并將各實體連續(xù)兩次獲取到的內 存使用情況數(shù)據(jù)進行比較;如果其中有實體每次得到的比較結果都是后一次比前一次使用內存的總數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。
8、 一種內存監(jiān)控的裝置,對使用內存的實體進行內存使用情況監(jiān)控,其 特征在于,包括抽樣模塊,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單元 中多次獲取待監(jiān)控實體的內存使用情況數(shù)據(jù);比較模塊,用于將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較,如果 每次得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù)多,則 確定所述實體存在內存泄露現(xiàn)象。
9、 如權利要求IO所述的裝置,其特征在于,所述比較模塊用于如果得 到的比較結果是后一次所述實體使用內存的總數(shù)比前一次少,則將后一次獲取到的內存使用情況數(shù)據(jù)與預先設置的實體使用內存的上限進行比較, 如果比較結果為后一次所述實體使用內存的總數(shù)比所述實體使用內存的上 限多,則確定所述實體存在內存泄露現(xiàn)象。
10、 如權利要求8或9所述的裝置,其特征在于,該裝置還包括 告警模塊,用于根據(jù)設定的告警方式和格式對所述內存泄露現(xiàn)象進行告警。
11、 一種內存監(jiān)控的裝置,對緩沖池進行內存使用情況監(jiān)控,其特征在 于,包括抽樣模塊,用于在一個監(jiān)控周期內,從存儲內存使用情況數(shù)據(jù)的存儲單 元中多次獲取待監(jiān)控緩沖池的內存使用情況數(shù)據(jù);比較模塊,用于將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較,如果 每次得到的比較結果都是后一次比前一次所述緩沖池使用內存的總數(shù)多, 則確定所述緩沖池存在內存泄露現(xiàn)象。
全文摘要
本發(fā)明公開了一種內存監(jiān)控的方法和裝置,對使用內存的實體進行內存使用情況監(jiān)控,內存使用情況數(shù)據(jù)存儲單元中保存有待監(jiān)控實體的內存使用情況數(shù)據(jù),所述待監(jiān)控實體的內存使用情況數(shù)據(jù)隨著待監(jiān)控實體的內存使用情況變化,該方法包括在一個監(jiān)控周期內,從所述內存使用情況數(shù)據(jù)存儲單元中多次獲取所述待監(jiān)控實體的內存使用情況數(shù)據(jù),并將連續(xù)兩次獲取到的內存使用情況數(shù)據(jù)進行比較;如果每次得到的比較結果都是后一次比前一次所述實體使用內存的總數(shù)多,則確定所述實體存在內存泄露現(xiàn)象。利用本發(fā)明所提供的方法和裝置能夠及時的發(fā)現(xiàn)系統(tǒng)中不易察覺的內存泄漏問題。
文檔編號G06F11/36GK101599048SQ20091014677
公開日2009年12月9日 申請日期2009年7月1日 優(yōu)先權日2009年7月1日
發(fā)明者張明振, 李炳泉, 陳佑建 申請人:福建星網(wǎng)銳捷網(wǎng)絡有限公司