天天看點

Linux--mkswap

轉自http://blog.sina.com.cn/s/blog_48212cbe0100i03e.html

關于swap交換分區的設定:

一種流行的、以訛傳訛的說法是,安裝Linux系統時,交換分區swap的大小應該是記憶體的兩倍。也就是說,如果記憶體是2G,那麼就應該分出4G的硬碟空間作為交換空間。其實這是嚴重的浪費。真實的情況是:可以根據你系統記憶體的大小,以及所使用的程式,自行決定交換分區的大小,甚至可以完全不用交換分區!

首先解釋一下什麼是交換分區。交換分區,英文的說法是swap,意思是“交換”、“實物交易”。它的功能就是在記憶體不夠的情況下,作業系統先把記憶體中暫時不用的資料,存到硬碟的交換空間,騰出記憶體來讓别的程式運作,和Windows的虛拟記憶體(pagefile.sys)的作用是一樣的。

做一個假設:如果你的記憶體足夠大,極少出現記憶體不足的情況,那麼你就不需要交換分區。事實上,這種可能性是完全存在的。現在的1G記憶體的電腦不算什麼了。動辄4G記憶體的電腦也日益普遍。日常使用的話,很少能用完全部的記憶體。在用不完記憶體容量的情況下,還要劃出它兩倍的硬碟空間用于記憶體交換,這不是浪費嗎?

可以說,在你記憶體基本夠用的情況下,完全可以不要交換空間。在Windows下也是一樣,在系統屬性中,把虛拟記憶體設定為0,系統依然運作的很好。當然,如果你用的是伺服器,還是要有專門的虛拟記憶體,有備無患。但是虛拟記憶體的大小不一定非要記憶體的兩倍。

那麼怎麼知道你的系統有沒有用到交換空間呢?隻需要在root使用者下,運作下面的指令就可以知道了。

free -m

在日常應用中,通過上述指令看到交換空間的使用情況為0,那麼你就不需要很大的虛拟記憶體,甚至可以完全不需要另辟硬碟空間作為虛拟記憶體。那麼,萬一有一天你需要了呢,難道要重裝系統?大可不必,在Linux下虛拟記憶體不單可以放在單獨的交換分區,也可以是一個在正常分區下的交換檔案。

---------------------------------------------------------------------

1 檢視swap 空間大小(總計):

    # free-m         預設單

位為k, -m 機關為M

                total      used      free    shared   buffers    cached

  Mem:          377       180       197         0        19       110

  -/+buffers/cache:        50       327

  Swap:         572         0       572

2 檢視swap空間(file(s)/partition(s)):

     包括 檔案 和 分區 的詳細資訊

  # swapon -s

  等價于

  # cat /proc/swaps

3添加交換空間

  兩種選擇:添加一個交換分區或添加一個交換檔案。推薦你添加一個交換分區;不過,若你沒有多少空閑空間可用,則添加交換檔案。

   3.1 添加一個交換分區

  步驟如下:

     a 使用fdisk來建立交換分區(假設 /dev/sdb2 是建立的交換分區)

     b 使用 mkswap 指令來設定交換分區:

   # mkswap /dev/sdb2

     c 啟用交換分區:

   # swapon /dev/sdb2

     d 寫入/etc/fstab,以便在引導時啟用:

      /dev/sdb2swap swap defaults 0 0

   3.2 添加一個交換檔案

  a 建立大小為512M的交換檔案:

   # dd if=/dev/zero of=/swapfile1 bs=1024k count=512

  b 使用 mkswap 指令來設定交換檔案:

   # mkswap /swapfile1

  c 啟用交換分區:

   # swapon /swapfile1

  d 寫入/etc/fstab,以便在引導時啟用:

   /swapfile1 swap swap defaults 0 0

  新添了交換分區并啟用它之後,請檢視 cat /proc/swaps 或free 指令的輸出來確定交換分區已被啟用了。

4 删除交換空間:

  a 禁用交換分區:

   # swapoff /dev/sdb2

  b 從 /etc/fstab 中删除項目;

  c 使用fdisk或yast工具删除分區。

  删除交換檔案步驟同上。

--------------------------------------------------------------------------------

  # free -m

                total      used      free    shared   buffers    cached

  Mem:          377       180       197         0        19       110

  -/+buffers/cache:        50       327

  Swap:         572         0       572

Mem 行顯示了從系統角度看來記憶體使用的情況, total是系統可用的記憶體大小,數量上等于系統實體記憶體減去核心保留的記憶體.

buffers和cached是系統用做緩沖的記憶體. buffers與某個塊裝置關聯, 包含了檔案系統中繼資料, 并且跟蹤了塊的變化.cache隻包含了檔案本身.

-/+ buffers/cache 行則從使用者角度顯示記憶體資訊,可用記憶體從數量上等于mem行used列值減去buffers和cached記憶體的大小.

因為buffers和cached是作業系統為加快系統運作而設定的, 當使用者需要時,可以隻接為使用者使用.

top顯示系統運作時的各程序動态、實時的狀态(cpu、記憶體)

top 中有3個列 VIRT RES SHR,标示了程序使用的記憶體情況.

VIRT 辨別這個程序可以使用的記憶體總大小, 包括這個程序真實使用的記憶體, 映射過的檔案, 和别的程序共享的記憶體等.

RES 辨別這個這個程序真實占用記憶體的大小.

SHR 辨別可以和别的程序共享的記憶體和庫大小.

vmstat 顯示記憶體的使用情況

這些指令都是從/proc/meminfo中讀取記憶體資訊.

關于/proc/meminfo中各行的含意,在核心源代碼的Documentation/filesystems/proc.txt檔案中有叙述

系統的真實記憶體大小可以用 dmesg | grep[mM][eE][mM]看到

/proc/pid/status顯示一個程序的詳細狀态

# cat /proc/5346/status

Name: bash

State: S (sleeping)

SleepAVG: 98%

Tgid: 5346

Pid: 5346

PPid: 5343

TracerPid: 0

Uid: 1000 1000 1000 1000

Gid: 104 104 104 104

FDSize: 256

Groups: 6 24 29 44 104 113 1000 1001

VmPeak: 6528 kB

VmSize: 6528 kB

VmLck: 0 kB

VmHWM: 1976 kB

VmRSS: 1976 kB

VmData: 752 kB

VmStk: 84 kB

VmExe: 644 kB

VmLib: 1788 kB

VmPTE: 16 kB

Threads: 1

SigQ: 0/4294967295

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000384004

SigCgt: 000000004b813efb

CapInh: 0000000000000000

CapPrm: 0000000000000000

CapEff: 0000000000000000

VmSize即為該程序記憶體總大小,和top輸出中的VIRT一緻.

繼續閱讀