• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 操作系統 > Linux教程 > LINUX系統內存管理的知識有哪些

    LINUX系統內存管理的知識有哪些

    時間: 曉斌668 分享

    LINUX系統內存管理的知識有哪些

      內存是Linux內核所管理的最重要的資源之一。內存管理系統是操作系統中最為重要的部分,因為系統的物理內存總是少于系統所需要的內存數量。虛擬內存就是為了克服這個矛盾而采用的策略。系統的虛擬內存通過在各個進程之間共享內存而使系統看起來有多于實際內存的內存容量。Linux支持虛擬內存, 就是使用磁盤作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬盤,騰出內存給其他目的。當原來的內容又要使用時,再讀回內存。以下就是學習啦小編為大家整理到的詳細LINUX系統內存管理的知識,歡迎大家閱讀!!!

      一、內存使用情況監測

      (1)實時監控內存使用情況

      在命令行使用“Free”命令可以監控內存使用情況

      代碼如下:

      #free

      total used free shared buffers cached

      Mem: 256024 192284 63740 0 10676 101004

      -/+ buffers/cache: 80604 175420

      Swap: 522072 0 522072

      上面給出了一個256兆的RAM和512兆交換空間的系統情況。第三行輸出(Mem:)顯示物理內存。total列不顯示核心使用的物理內存(通常大約1MB)。used列顯示被使用的內存總額(第二行不計緩沖)。 free列顯示全部沒使用的內存。Shared列顯示多個進程共享的內存總額。Buffers列顯示磁盤緩存的當前大小。第五行(Swap:)對對換空間,顯示的信息類似上面。如果這行為全0,那么沒使用對換空間。在缺省的狀態下,free命令以千字節(也就是1024字節為單位)來顯示內存使用情況。可以使用—h參數以字節為單位顯示內存使用情況,或者可以使用—m參數以兆字節為單位顯示內存使用情況。還可以通過—s參數使用命令來不間斷地監視內存使用情況:

      #free –b –s2

      這個命令將會在終端窗口中連續不斷地報告內存的使用情況,每2秒鐘更新一次。

      (2)組合watch與 free命令用來實時監控內存使用情況:

      代碼如下:

      #watch -n 2 -d free

      Every 2.0s: free Fri Jul 6 06:06:12 2007

      total used free shared buffers cached

      Mem: 233356 218616 14740 0 5560 64784

      -/+ buffers/cache: 148272 85084

      Swap: 622584 6656 615928

      watch命令會每兩秒執行 free一次,執行前會清除屏幕,在同樣位置顯示數據。因為 watch命令不會卷動屏幕,所以適合出長時間的監測內存使用率。可以使用 -n選項,控制執行的頻率;也可以利用 -d選項,讓命令將每次不同的地方顯示出來。Watch命令會一直執行,直到您按下 [Ctrl]-[C] 為止。

      二、虛擬內存的概念

      (1)Linux虛擬內存實現機制

      Linux虛擬內存的實現需要六種機制的支持:地址映射機制、內存分配回收機制、緩存和刷新機制、請求頁機制、交換機制、內存共享機制。

      首先內存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時如果發現程序中要用的虛地址沒有對應的物理內存時,就發出了請求頁要求;如果有空閑的內存可供分配,就請求分配內存(于是用到了內存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機制)。 如果沒有足夠的內存可供分配,那么就調用交換機制,騰出一部分內存。另外在地址映射中要通過TLB(翻譯后援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,并且把物理頁內容交換到交換文件中后也要修改頁表來映射文件地址。

      (2)虛擬內存容量設定

      也許有人告訴你,應該分配2倍于物理內存的虛擬內存,但這是個不固定的規律。如果你的物理保存比較小,可以這樣設定。如果你有1G物理內存或更多的話,可以縮小一下虛擬內存。Linux會把大量的內存用做Cache的,但在資源緊張時回收回.。你只要看到swap為0或者很小就可以放心了,因為內存放著不用才是最大的浪費。

      三、使甩vmstat命令監視虛擬內存使用情況

      vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。通常使用vmstat 5 5(表示在5秒時間內進行5次采樣)命令測試。將得到一個數據匯總它可以反映真正的系統情況。

      代碼如下:

      #vmstat 5 5

      procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

      r b swpd free buff cache si so bi bo in cs us sy id wa

      1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2

      0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0

      0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0

      1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0

      1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0

      vmstat命令輸出分成六個部分:

      (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,表示物理內存容量太小。

      四、Linux 服務器的內存泄露和回收內存的方法

      1、內存泄漏的定義:

      一般我們常說的內存泄漏是指堆內存的泄漏。堆內存是指程序從堆中分配的,大小任意的(內存塊的大小可以在程序運行期決定),使用完后必須顯示釋放的內存。應用程序一般使用malloc,realloc,new等函數從堆中分配到一塊內存,使用完后,程序必須負責相應的調用free或delete釋放該內存塊,否則,這塊內存就不能被再次使用,我們就說這塊內存泄漏了。

      2、內存泄露的危害

      從用戶使用程序的角度來看,內存泄漏本身不會產生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統所有的內存。從這個角度來說,一次性內存泄漏并沒有什么危害,因為它不會堆積,而隱式內存泄漏危害性則非常大,因為較之于常發性和偶發性內存泄漏它更難被檢測到。存在內存泄漏問題的程序除了會占用更多的內存外,還會使程序的性能急劇下降。對于服務器而言,如果出現這種情況,即使系統不崩潰,也會嚴重影響使用。

      3、內存泄露的檢測和回收

      對于內存溢出之類的麻煩可能大家在編寫指針比較多的復雜的程序的時候就會遇到。在 Linux 或者 unix 下,C、C++語言是最使用工具。但是我們的 C++ 程序缺乏相應的手段來檢測內存信息,而只能使用 top 指令觀察進程的動態內存總額。而且程序退出時,我們無法獲知任何內存泄漏信息。

      使用kill命令

      使用Linux命令回收內存,我們可以使用Ps、Kill兩個命令檢測內存使用情況和進行回收。在使用超級用戶權限時使用命令“Ps”,它會列出所有正在運行的程序名稱,和對應的進程號(PID)。Kill命令的工作原理是:向Linux操作系統的內核送出一個系統操作信號和程序的進程號(PID)。

      應用例子:

      為了高效率回收內存可以使用命令ps 參數v:

      代碼如下:

      [root@www ~]# ps v

      PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND

      2542 tty1 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty1

      2543 tty2 Ss+ 0:00 0 8 1631 428 0.1 /sbin/mingetty tty2

      2547 tty3 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty3

      2548 tty4 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty4

      2574 tty5 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty5

      2587 tty6 Ss+ 0:00 0 8 1627 424 0.1 /sbin/mingetty tty6

      2657 tty7 Ss+ 1:18 12 1710 29981 7040 3.0 /usr/bin/Xorg :0 -br -a

      2670 pts/2 Ss 0:01 2 682 6213 1496 0.6 -bash

      3008 pts/4 Ss 0:00 2 682 6221 1472 0.6 /bin/bash

      3029 pts/4 S+ 0:00 2 32 1783 548 0.2 ping 192.168.1.12

      3030 pts/2 R+ 0:00 2 73 5134 768 0.3 ps v

      然后如果想回收Ping命令的內存的話,使用命令:

      代碼如下:

      # Kill -9 3029

      使用工具軟件

      Memprof是一個非常具有吸引力且非常易于使用的軟件,它由Red Hat的Owen Talyor創立。這個工具是用于GNOME前端的Boehm-Demers-Weiser垃圾回收器。這個工具直接就可以執行,并且其工作起來無需對源代碼進行任何修改。在程序執行時,這個工具會以圖形化的方式顯示內存的使用情況。

    404135 主站蜘蛛池模板: 国产成人久久久精品二区三区| 亚洲免费在线观看| 欧美日韩视频在线观看高清免费网站| 亚洲精品亚洲人成在线观看| 欧美激情一区二区三区免费观看| 亚洲成av人在线视| 欧美三级在线观看不卡视频| 五月天综合视频| 日本里番全彩acg里番下拉式| 久久久久人妻一区精品性色av| 成年无码av片在线| 一本一道波多野结衣大战黑人| 女**毛片一级毛片一| 99久久国产综合精品swag| 国产精品色拉拉免费看| 日本三级网站在线观看| 国产大片内射1区2区| 色一情一乱一伦一视频免费看| 午夜福利一区二区三区在线观看| 精品国产v无码大片在线观看| 人妻有码中文字幕| 欧美最猛黑人xxxx黑人猛交| 亚洲av日韩av综合| 日本漫画大全无翼无彩全番| 中文字幕亚洲欧美在线不卡| 好吊妞视频在线| 8888四色奇米在线观看不卡 | 最新jizz欧美| 国产情侣91在线播放| 色偷偷成人网免费视频男人的天堂 | 久久午夜国产片| 成人嗯啊视频在线观看| aaaaaa级特色特黄的毛片| 国产精品污WWW一区二区三区| 激情图片在线视频| 国产一区二区三区精品视频| 福利网站在线播放| 亚洲成人黄色网址| 日韩中文字幕网| 一本无码中文字幕在线观| 国内精品久久久人妻中文字幕|