剛剛買的服務器內存太小了,找了一下原來的命令,乾脆搬到CSDN上。文檔多了很難找
第一:創建swap
[root@izwz99z5o9dc90keftqhlrz mnt]# dd if=/dev/zero of=/mnt/swap/swapfile bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 37.1569 s, 116 MB/s
命令說明:創建一個4096M 的swap,耗時37S,平均速率:116MB/s
第二:開機自動加載
[root@izwz99z5o9dc90keftqhlrz mnt]# mkswap swapfile
swapfile: No such file or directory
[root@izwz99z5o9dc90keftqhlrz mnt]# cd /mnt/swap
[root@izwz99z5o9dc90keftqhlrz swap]# mkswap swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=a392d881-3673-49da-a30c-f04c2fd7ee78
/mnt/swap 下面來操作
[root@izwz99z5o9dc90keftqhlrz mnt]# vim /etc/fstab
加入下面這一段:/mnt/swap/swapfile 上面我們創建的
/mnt/swap/swapfile swap swap defaults 0 0
第三:現在掛載使用
[root@izwz99z5o9dc90keftqhlrz swap]# swapon /mnt/swap/swapfile
swapon: /mnt/swap/swapfile: insecure permissions 0644, 0600 suggested.
[root@izwz99z5o9dc90keftqhlrz swap]#
第四:卸載下來
[root@izwz99z5o9dc90keftqhlrz swap]# swapoff /mnt/swap/swapadd
題外話:
[root@izwz99z5o9dc90keftqhlrz swap]# free -h
total used free shared buff/cache available
Mem: 3.8G 3.1G 75M 440K 621M 507M
Swap: 4.0G 0B 4.0G
[root@izwz99z5o9dc90keftqhlrz swap]#
第五:swap推薦設置
4G以內的物理內存,SWAP 設置爲內存的2倍。
4-8G的物理內存,SWAP 等於內存大小。
8-64G 的物理內存,SWAP 設置爲8G。
64-256G物理內存,SWAP 設置爲16G。
第六:swappiness到底是用來調節什麼的?
系統使用swap的規則閾值(實際上,並不是等所有的物理內存都消耗完畢之後,纔去使用swap的空間,什麼時候使用是由swappiness 參數值控制。)
# 查看當前設置
cat /proc/sys/vm/swappiness
# swappiness=0的時候表示最大限度使用物理內存,然後纔是 swap空間。
# swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裏面。
# 臨時修改
sysctl vm.swappiness=80
#永久修改,在/etc/sysctl.conf 文件裏添加如下參數:
vm.swappiness=10
使配置立即生效
/sbin/sysctl -p
我一般設置 swappiness = 80
[root@izwz99z5o9dc90keftqhlrz ~]# free -h
total used free shared buff/cache available
Mem: 3.8G 2.5G 379M 92K 828M 121M
Swap: 4.0G 141M 3.9G
[root@izwz99z5o9dc90keftqhlrz ~]#
一些重要的細節如下:
很多人應該都知道/proc/sys/vm/swappiness這個文件,是個可以用來調整跟swap相關的參數。這個文件的默認值是60,可以的取值範圍是0-100。
這很容易給大家一個暗示:我是個百分比哦!
那麼這個文件具體到底代表什麼意思呢?我們先來看一下說明:
======
swappiness
This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap.
A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.
The default value is 60.
======
這個文件的值用來定義內核使用swap的積極程度:
值越高,內核就會越積極的使用swap;
值越低,就會降低對swap的使用積極性。
如果這個值爲0,那麼內存在free和file-backed使用的頁面總量小於高水位標記(high water mark)之前,不會發生交換。
在這裏我們可以理解file-backed這個詞的含義了,實際上就是上文所說的文件映射頁的大小。
那麼這個swappiness到底起到了什麼作用呢?
我們換個思路考慮這個事情。假設讓我們設計一個內存回收機制,要去考慮將一部分內存寫到swap分區上,將一部分file-backed的內存寫回並清空,剩餘部分內存出來,我們將怎麼設計?
我想應該主要考慮這樣幾個問題:
如果回收內存可以有兩種途徑(匿名頁交換和file緩存清空),那麼我應該考慮在本次回收的時候,什麼情況下多進行file寫回,什麼情況下應該多進行swap交換。說白了就是平衡兩種回收手段的使用,以達到最優。
如果符合交換條件的內存較長,是不是可以不用全部交換出去?比如可以交換的內存有100M,但是目前只需要50M內存,實際只要交換50M就可以了,不用把能交換的都交換出去。
分析代碼會發現,Linux內核對這部分邏輯的實現代碼在get_scan_count()這個方法中,這個方法被shrink_lruvec()調用。
get_sacn_count()就是處理上述邏輯的,swappiness是它所需要的一個參數,這個參數實際上是指導內核在清空內存的時候,是更傾向於清空file-backed內存還是更傾向於進行匿名頁的交換的。
當然,這只是個傾向性,是指在兩個都夠用的情況下,更願意用哪個,如果不夠用了,那麼該交換還是要交換。
簡單看一下get_sacn_count()函數的處理部分代碼,其中關於swappiness的第一個處理是:
這裏註釋的很清楚:
如果swappiness設置爲100,那麼匿名頁和文件將用同樣的優先級進行回收。
很明顯,使用清空文件的方式將有利於減輕內存回收時可能造成的IO壓力。
因爲如果file-backed中的數據不是髒數據的話,那麼可以不用寫回,這樣就沒有IO發生,而一旦進行交換,就一定會造成IO。
所以系統默認將swappiness的值設置爲60,這樣回收內存時,對file-backed的文件cache內存的清空比例會更大,內核將會更傾向於進行緩存清空而不是交換。這裏指老版本的Linux,現在我們的系統基本都是設置爲0.因爲swap都是我們自己配置的
這裏的swappiness值如果是60,那麼是不是說內核回收的時候,會按照60:140的比例去做相應的swap和清空file-backed的空間呢?並不是。
參考來自: