SWAP(交換內存)
1、什么是交換內存?
在硬盤上創建一塊區域,當你的物理內存快要被用光的時候,內核臨時的
物理內存上的文件數據交換到硬盤上的這段區域上面,當物理內存有閑置的時候
在把交換內存上的數據調回到物理內存上的。可能在大多數時候,你會發現你的
交換內存沒有被用到,為什么我們的系統在安裝的時候強制我們要建立交換內存?
犧牲一定的硬盤空間,給操作系統買份保險!
2、創建交換內存:
創建的步驟:
1、 創建新分區,並且更改分區標識符號為82.
或者在本機上使用dd命令創建一個虛擬文件。
2、 使用mkswap對指定設備制作交換內存文件系統。
3、 swapon開啟交換內存
(但是非常遺憾,下次啟動機器的時候仍然需要手動使用swapon手動開啟)建議直接寫入到/etc/fstab中
4、 查看free -m ,swapon -s進行查看
分區類型交換內存:速度快、獨立分區
1、fdisk /dev/sdb
n t 82
#partprobe /dev/sdb //重新加載分區表
2、制作swap
# mkswap /dev/sdb7 //以sdb7為例
3、寫/etc/fstab
/dev/sdb7 swap swap defaults 0 0 //永久掛載格式
UUID=XXXXXX swap swap defaults 0 0 //生產環境blkid查看文件系統UUID
# swapon -a
4、查看:
# free -m
# swapon -s
文件類型的交換內存:相對速度慢、比較靈活
1、創建虛擬文件:
# dd if=/dev/zero of=/tmp/swap-file1 bs=1M count=N //N為正整數
2、制作swap文件系統
# mkswap /tmp/swap-file1
3、掛載使用/etc/fstab
/tmp/swap-file1 swap swap defaults 0 0
# swapon -a
4、查看:
# free -m
# swapon -s
交換內存的優化及人為干預:
交換內存的調優:
可調參數:/proc/sys/vm/swappiness
當系統非常需要使用內存時,內核會把匿名內存(Anonymous memory)和System V的共享內存(shared memory)交換到磁盤上去,而真正的文件不需要交換到交換內存上去,而是直接寫會到磁盤文件系統上(清掉page cache)。
調低/proc/sys/vm/swappiness時,核心傾向於不交換,主要用於更快的響應速度。如:apache
調高/proc/sys/vm/swappiness時,核心傾向於使用交換內存,主要用於繁忙的吞吐量。如:文件服務器
內核嘗試去檢查一個參數swap_tendency:
Swap_tendency < 100,內核會盡量的從page cache中做回收(寫回page cache)
Swap_tendency >=100,內核會盡量交換匿名內存和共享內存。
Swap_tendency = mapped_ratio/2 + distress + vm_swappiness(swap_tendency計算公式)
● mapped_ration : 物理內存的使用百分比。
● distress : 內核嘗試釋放物理內存的難易程度0-100(page cache回收的難易程度)。distress悲痛;危難
● vm_swappiness:是我們可以通過/proc/sys/vm/swappiness內核參數調節的值。
可以看出我們可以人為的干預交換內存的交換,但無法准確控制因為有distress參數
交換內存的優化:
● 使用多個磁盤做raid0
● 使用SSD設備
● 2.6內核開始交換文件和交換分區,速度上區別不太只要文件沒有太多碎片。
● 當掛載交換分區或文件時,每新加一個交換設備優先級比前一個要低一些(優先級高的被先用到)。可以使用 pri=values來指定掛載優先級。
如果要使用多個交換分區來輪詢(round-robin),那么多個交換分區使用相同的優先級。
交換內存設置為多大?
docs.redhat.com
如何設置優先級:
/dev/sdb7 swap swap defaults,pri=5 0 0
/dev/sdc6 swap swap defaults,pri=5 0 0