Linux服務器系統內存監控方法詳解 |
發布時間: 2012/8/11 10:58:53 |
內存是Linux內核所管理的最重要的資源之一。內存管理系統是操作系統中最為重要的部分,因為系統的物理內存總是少于系統所需要的內存數量。虛擬內存就是為了克服這個矛盾而采用的策略。系統的虛擬內存通過在各個進程之間共享內存而使系統看起來有多于實際內存的內存容量。Linux支持虛擬內存,就是使用磁盤作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬盤,騰出內存給其他目的。當原來的內容又要使用時,再讀回內存。
一、內存使用情況監測 (1)實時監控內存使用情況 在命令行使用“Free”命令可以監控內存使用情況
#free–b–s2 這個命令將會在終端窗口中連續不斷地報告內存的使用情況,每2秒鐘更新一次。 (2)組合watch與free命令用來實時監控內存使用情況:
二、虛擬內存的概念 (1)Linux虛擬內存實現機制 Linux虛擬內存的實現需要六種機制的支持:地址映射機制、內存分配回收機制、緩存和刷新機制、請求頁機制、交換機制、內存共享機制。 首先內存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時如果發現程序中要用的虛地址沒有對應的物理內存時,就發出了請求頁要求;如果有空閑的內存可供分配,就請求分配內存(于是用到了內存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機制)。如果沒有足夠的內存可供分配,那么就調用交換機制,騰出一部分內存。另外在地址映射中要通過TLB(翻譯后援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,并且把物理頁內容交換到交換文件中后也要修改頁表來映射文件地址。 (2)虛擬內存容量設定 也許有人告訴你,應該分配2倍于物理內存的虛擬內存,但這是個不固定的規律。如果你的物理保存比較小,可以這樣設定。如果你有1G物理內存或更多的話,可以縮小一下虛擬內存。Linux會把大量的內存用做Cache的,但在資源緊張時回收回.。你只要看到swap為0或者很小就可以放心了,因為內存放著不用才是最大的浪費。 三、使甩vmstat命令監視虛擬內存使用情況 vmstat是VirtualMeomoryStatistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。通常使用vmstat55(表示在5秒時間內進行5次采樣)命令測試。將得到一個數據匯總它可以反映真正的系統情況。
(1)進程procs: r:在運行隊列中等待的進程數。 b:在等待io的進程數。 (2)內存memoy: swpd:現時可用的交換內存(單位KB)。 free:空閑的內存(單位KB)。 buff:緩沖去中的內存數(單位:KB)。 cache:被用來做為高速緩存的內存數(單位:KB)。 (3)swap交換頁面 si:從磁盤交換到內存的交換頁數量,單位:KB/秒。 so:從內存交換到磁盤的交換頁數量,單位:KB/秒。 (4)io塊設備: bi:發送到塊設備的塊數,單位:塊/秒。 bo:從塊設備接收到的塊數,單位:塊/秒。 (5)system系統: in:每秒的中斷數,包括時鐘中斷。 cs:每秒的環境(上下文)切換次數。 (6)cpu中央處理器: cs:用戶進程使用的時間。以百分比表示。 sy:系統進程使用的時間。以百分比表示。 id:中央處理器的空閑時間。以百分比表示。 如果r經常大于4,且id經常小于40,表示中央處理器的負荷很重。如果bi,bo長期不等于0,表示物理內存容量太小。
1、內存泄漏的定義: 一般我們常說的內存泄漏是指堆內存的泄漏。堆內存是指程序從堆中分配的,大小任意的(內存塊的大小可以在程序運行期決定),使用完后必須顯示釋放的內存。應用程序一般使用malloc,realloc,new等函數從堆中分配到一塊內存,使用完后,程序必須負責相應的調用free或delete釋放該內存塊,否則,這塊內存就不能被再次使用,我們就說這塊內存泄漏了。 2、內存泄露的危害 從用戶使用程序的角度來看,內存泄漏本身不會產生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統所有的內存。從這個角度來說,一次性內存泄漏并沒有什么危害,因為它不會堆積,而隱式內存泄漏危害性則非常大,因為較之于常發性和偶發性內存泄漏它更難被檢測到。存在內存泄漏問題的程序除了會占用更多的內存外,還會使程序的性能急劇下降。對于服務器而言,如果出現這種情況,即使系統不崩潰,也會嚴重影響使用。 本文出自:億恩科技【www.vbseamall.com】 |