歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 由匿名內存看swap分區

由匿名內存看swap分區

日期:2017/3/1 17:20:59   编辑:關於Linux
看代碼的時候,從能看到通過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