歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

由匿名內存看swap分區

看代碼的時候,從能看到通過mmap映射一段匿名內存,但是為什麼非要映射一段匿名內存呢,匿名內存到底是干啥用的?對這個問題一直不解,今天google了很多資料,總結一下自己理解的內容。
 
    1 匿名內存的定義
 
    匿名內存是指那些在文件系統裡沒有相對應的”儲備文件“的那些內存,堆和棧空間的內存都屬於匿名內存。
 
   2 匿名內存的用途
 
    匿名內存來源於交換分區,即linux下的swap分區。
 
    Swap空間的作用可簡單描述為:當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。
 
 你可能會經常遇這種現象。例如,在使用linux系統同時運行多個程序時,當你切換到一個很長時間沒有理會的程序時,會聽到硬盤“嘩嘩”直響。這是因為這個程序的內存被那些頻繁運行的程序給“偷走”了,放到了Swap區中。因此,一旦此程序被放置到前端,它就會從Swap區取回自己的數據,將其放進內存,然後接著運行。
 
    需要說明一點,並不是所有從物理內存中交換出來的數據都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分數據被直接交換到文件系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數據放到Swap空間中了,而可以直接將其放到文件裡去。如果是讀文件操作,那麼內存數據被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統恢復;如果是寫文件,只需要將變化的數據保存到文件中,以便恢復。但是那些用malloc和new函數生成的對象的數據則不同,它們需要Swap空間,因為它們在文件系統中沒有相應的“儲備”文件,因此被稱作“匿名”(Anonymous)內存數據。這類數據還包括堆棧中的一些狀態和變量數據等。所以說,Swap空間是“匿名”數據的交換空間
 
    3 swap分區對性能的影響
 
    分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。 如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那麼系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。
 
   4 swap空間的監測方法
 
    Swap空間的分配固然很重要,而系統運行時的性能監控卻更加有價值。通過性能監視工具,可以檢查系統的各項性能指標,找到系統性能的瓶頸。本文只介紹一下在Solaris下和Swap相關的一些命令和用途。
 
  最常用的是vmstat命令,此命令可以查看大多數性能指標。
 
命令說明:
 
  vmstat 後面的參數指定了性能指標捕獲的時間間隔。3表示每三秒鐘捕獲一次。第一行數據不用看,沒有價值,它僅反映開機以來的平均性能。從第二行開始,反映每三秒鐘之內的系統性能指標。這些性能指標中和Swap有關的包括以下幾項:
 
  procs下的w
 
  它表示當前(三秒鐘之內)需要釋放內存、交換出去的進程數量。
 
  memory下的swpd
 
  它表示使用的Swap空間的大小。
 
  Swap下的si,so
 
  si表示當前(三秒鐘之內)每秒交換回內存(Swap in)的總量,單位為kbytes;so表示當前(三秒鐘之內)每秒交換出內存(Swap out)的總量,單位為kbytes。
 
  以上的指標數量越大,表示系統越忙。這些指標所表現的系統繁忙程度,與系統具體的配置有關。系統管理員應該在平時系統正常運行時,記下這些指標的數值,在系統發生問題的時候,再進行比較,就會很快發現問題,並制定本系統正常運行的標准指標值,以供性能監控使用。
 
    5 增加和刪除swap空間的方法
 
增加Swap空間,分以下幾步:
 
  1)成為超級用戶
 
  $su passwd root
 
  2)創建Swap文件
 
  # dd if=/dev/zero of=swapfile bs=1024 count=65536
 
  創建一個有連續空間的交換文件。
 
  3)激活Swap文件
 
  #/usr/sbin/swapon swapfile
 
  swapfile指的是上一步創建的交換文件。4)現在新加的Swap文件已經起作用了,但系統重新啟動以後,並不會記住前幾步的操作。因此要在/etc/fstab文件中記錄文件的名字,和Swap類型,如:
 
  /path/swapfile none Swap sw,pri=3 0 0
 
  5)檢驗Swap文件是否加上
 
  /usr/sbin/swapon -s
 
  刪除多余的Swap空間。
 
  1)成為超級用戶
 
  2)使用Swapoff命令收回Swap空間。
 
  #/usr/sbin/swapoff swapfile
 
  3)編輯/etc/fstab文件,去掉此Swap文件的實體。
 
  4)從文件系統中回收此文件。
 
  #rm swapfile
 
  5)當然,如果此Swap空間不是一個文件,而是一個分區,則需創建一個新的文件系統,再掛接到原來的文件系統上。
 
Copyright © Linux教程網 All Rights Reserved