溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swap交換分區(qū)概念

發(fā)布時間:2020-08-06 23:05:54 來源:ITPUB博客 閱讀:231 作者:Thinkbase 欄目:建站服務器
轉(zhuǎn)載自瀟湘隱者
原文鏈接:http://www.cnblogs.com/kerrycode/p/5246383.html



什么是Linux swap space呢?我們先來看看下面兩段關于Linux swap space的英文介紹資料:

 

Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on the hard disk, called swap space, to free up that page of memory. The combined sizes of the physical memory and the swap space is the amount of virtual memory available.

Swap space in Linux is used when the amount of physical memory (RAM) is full. If the system needs more memory resources and the RAM is full, inactive pages in memory are moved to the swap space. While swap space can help machines with a small amount of RAM, it should not be considered a replacement for more RAM. Swap space is located on hard drives, which have a slower access time than physical memory.Swap space can be a dedicated swap partition (recommended), a swap file, or a combination of swap partitions and swap files.

 

Linux內(nèi)核為了提高讀寫效率與速度,會將文件在內(nèi)存中進行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運行結(jié)束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統(tǒng)中程序頻繁讀寫文件后,你會發(fā)現(xiàn)可用物理內(nèi)存變少。當系統(tǒng)的物理內(nèi)存不夠用的時候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap分區(qū)中恢復保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時,才進行Swap交換。

關于Swap分區(qū),其實我們有很多疑問,如果能弄清楚這些疑問,那么你對Swap的了解掌握就差不多了。如何查看Swap分區(qū)大小? Swap分區(qū)大小應該如何設置?系統(tǒng)在什么時候會使用Swap分區(qū)? 是否可以調(diào)整? 如何調(diào)整Swap分區(qū)的大?。縎wap分區(qū)有什么優(yōu)劣和要注意的地方? Swap分區(qū)是否必要?那么我一個一個來看看這些疑問吧!

 

查看Swap分區(qū)大小

 

查看Swap分區(qū)的大小以及使用情況,一般使用free命令即可,如下所示,Swap大小為2015M,目前沒有使用Swap分區(qū)

[root@DB-Server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1000        855        145          0         28        296
-/+ buffers/cache:        530        470
Swap:         2015          0       2015

另外我們還可以使用swapon命令查看當前swap相關信息:例如swap空間是swap partition,Swap size,使用情況等詳細信息

[root@DB-Server ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda3                               partition       2064344 0       -1
[root@DB-Server ~]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda3                               partition       2064344 0       -1
[root@DB-Server ~]# 

Swap交換分區(qū)概念

 

Swap分區(qū)大小設置

 

系統(tǒng)的Swap分區(qū)大小設置多大才是最優(yōu)呢? 關于這個問題,應該說只能有一個統(tǒng)一的參考標準,具體還應該根據(jù)系統(tǒng)實際情況和內(nèi)存的負荷綜合考慮,像ORACLE的官方文檔就推薦如下設置,這個是根據(jù)物理內(nèi)存來做參考的。

RAM

Swap Space

Up to 512 MB

2 times the size of RAM

Between 1024 MB and 2048 MB

1.5 times the size of RAM

Between 2049 MB and 8192 MB

Equal to the size of RAM

More than 8192 MB 

 0.75 times the size of RAM

另外在其它博客中看到下面一個推薦設置,當然我不清楚其怎么得到這個標準的。是否合理也無從考證??梢宰鳛橐粋€參考。

4G以內(nèi)的物理內(nèi)存,SWAP 設置為內(nèi)存的2倍。

4-8G的物理內(nèi)存,SWAP 等于內(nèi)存大小。

8-64G 的物理內(nèi)存,SWAP 設置為8G。

64-256G物理內(nèi)存,SWAP 設置為16G。

上下兩個標準確實也很讓人無所適從。我就有一次在一臺ORACLE數(shù)據(jù)庫服務器(64G的RAM),按照官方推薦設置了一個很大的Swap分區(qū),但是我發(fā)現(xiàn)其實這個Swap幾乎很少用到,其實是浪費了磁盤空間。所以如果根據(jù)系統(tǒng)實際情況和內(nèi)存的負荷綜合考慮,其實應該按照第二個參考標準設置為8G即可。當然這個只是個人的一些認知。

 

釋放Swap分區(qū)空間

 

[root@testlnx ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         64556      55368       9188          0        926      51405
-/+ buffers/cache:       3036      61520
Swap:        65535         13      65522
[root@testlnx ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition       67108856        14204   -1

使用swapoff關閉交換分區(qū)

[root@testlnx ~]# swapoff /dev/mapper/VolGroup00-LogVol01

使用swapon啟用交換分區(qū),此時查看交換分區(qū)的使用情況,你會發(fā)現(xiàn)used為0了

[root@testlnx ~]# swapon /dev/mapper/VolGroup00-LogVol01
[root@testlnx ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         64556      55385       9171          0        926      51406
-/+ buffers/cache:       3052      61504
Swap:        65535          0      65535
[root@testlnx ~]#

 

Swap分區(qū)空間什么時候使用

 

系統(tǒng)在什么情況或條件下才會使用Swap分區(qū)的空間呢? 其實是Linux通過一個參數(shù)swappiness來控制的。當然還涉及到復雜的算法。

這個參數(shù)值可為 0-100,控制系統(tǒng) swap 的使用程度。高數(shù)值可優(yōu)先系統(tǒng)性能,在進程不活躍時主動將其轉(zhuǎn)換出物理內(nèi)存。低數(shù)值可優(yōu)先互動性并盡量避免將進程轉(zhuǎn)換處物理內(nèi)存,并降低反應延遲。默認值為 60。注意:這個只是一個權(quán)值,不是一個百分比值,涉及到系統(tǒng)內(nèi)核復雜的算法。關于該參數(shù)請參考這篇文章[轉(zhuǎn)載]調(diào)整虛擬內(nèi)存,在此不做過多贅述。下面是關于swappiness的相關資料

 

The Linux 2.6 kernel added a new kernel parameter called swappiness to let administrators tweak the way Linux swaps. It is a number from 0 to 100. In essence, higher values lead to more pages being swapped, and lower values lead to more applications being kept in memory, even if they are idle. Kernel maintainer Andrew Morton has said that he runs his desktop machines with a swappiness of 100, stating that "My point is that decreasing the tendency of the kernel to swap stuff out is wrong. You really don't want hundreds of megabytes of BloatyApp's untouched memory floating about in the machine. Get it out on the disk, use the memory for something useful."

Swappiness is a property of the Linux kernel that changes the balance between swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100 inclusive. A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space. The default value is 60, and for most desktop systems, setting it to 100 may affect the overall performance, whereas setting it lower (even 0) may improve interactivity (by decreasing response latency.

 

有兩種臨時修改swappiness參數(shù)的方法,系統(tǒng)重啟后失效

方法1:
[root@DB-Server ~]# more /proc/sys/vm/swappiness
60
[root@DB-Server ~]# echo 10 > /proc/sys/vm/swappiness
[root@DB-Server ~]# more /proc/sys/vm/swappiness
10
 
方法2
[root@DB-Server ~]#sysctl vm.swappiness=10

永久修改swappiness參數(shù)的方法就是在配置文件/etc/sysctl.conf里面修改vm.swappiness的值,然后重啟系統(tǒng)

echo 'vm.swappiness=10' >>/etc/sysctl.conf

如果有人會問是否物理內(nèi)存使用到某個百分比后才會使用Swap交換空間,可以明確的告訴你不是這樣一個算法,如下截圖所示,及時物理內(nèi)存只剩下8M了,但是依然沒有使用Swap交換空間,而另外一個例子,物理內(nèi)存還剩下19G,居然用了一點點Swap交換空間。

Swap交換分區(qū)概念

Swap交換分區(qū)概念

另外調(diào)整/proc/sys/vm/swappiness這個參數(shù),如果你沒有絕對把握,就不要隨便調(diào)整這個內(nèi)核參數(shù),這個參數(shù)符合大多數(shù)情況下的一個最優(yōu)值。

 

Swap交換分區(qū)對性能的影響

 

我們知道Linux可以使用文件系統(tǒng)中的一個常規(guī)文件或獨立分區(qū)作為Swap交換空間,相對而言,交換分區(qū)要快一些。但是和RAM比較而言,Swap交換分區(qū)的性能依然比不上物理內(nèi)存,目前的服務器上RAM基本上都相當充足,那么是否可以考慮拋棄Swap交換分區(qū),是否不需要保留Swap交換分區(qū)呢?這個其實是我的疑問之一。在這篇What Is a Linux SWAP Partition, And What Does It Do?博客中,作者給出了swap交換空間的優(yōu)劣

Advantages:

  1. Provides overflow space when your memory fills up completely
  2. Can move rarely-needed items away from your high-speed memory
  3. Allows you to hibernate

Disadvantages:

  1. Takes up space on your hard drive as SWAP partitions do not resize dynamically
  2. Can increase wear and tear to your hard drive
  3. Does not necessarily improve performance (see below)

其實保留swap分區(qū)概括起來可以從下面來看:

首先,當物理內(nèi)存不足以支撐系統(tǒng)和應用程序(進程)的運作時,這個Swap交換分區(qū)可以用作臨時存放使用率不高的內(nèi)存分頁,把騰出的內(nèi)存交給急需的應用程序(進程)使用。有點類似機房的UPS系統(tǒng),雖然正常情況下不需要使用,但是異常情況下, Swap交換分區(qū)還是會發(fā)揮其關鍵作用。

其次,即使你的服務器擁有足夠多的物理內(nèi)存,也有一些程序會在它們初始化時殘留的極少再用到的內(nèi)存分頁內(nèi)容轉(zhuǎn)移到 swap 空間,以此讓出物理內(nèi)存空間。對于有發(fā)生內(nèi)存泄漏幾率的應用程序(進程),Swap交換分區(qū)更是重要,因為誰也不想看到由于物理內(nèi)存不足導致系統(tǒng)崩潰。

最后,現(xiàn)在很多個人用戶在使用Linux,有些甚至是PC的虛擬機上跑Linux系統(tǒng),此時可能常用到休眠(Hibernate),這種情況下也是推薦劃分Swap交換分區(qū)的。

其實少量使用Swap交換空間是不會影響性能,只有當RAM資源出現(xiàn)瓶頸或者內(nèi)存泄露,進程異常時導致頻繁、大量使用交換分區(qū)才會導致嚴重性能問題。另外使用Swap交換分區(qū)頻繁,還會引起kswapd0進程(虛擬內(nèi)存管理中, 負責換頁的)耗用大量CPU資源,導致CPU飆升。

關于Swap分區(qū)的優(yōu)劣以及是否應該舍棄,我有點惡趣味的想到了這個事情:人身上的兩個器官,闌尾和扁桃體。切除闌尾或扁桃體是否也是爭論不休。另外,其實不要Swap交換分區(qū),Linux也是可以正常運行的(有人提及過這個問題)

 

調(diào)整Swap分區(qū)的大小

如下測試案例所示,Swap分區(qū)大小為65535M,我現(xiàn)在想將Swap分區(qū)調(diào)整為8G,那么我們來看看具體操作吧

1:查看Swap的使用情況以及相關信息

[root@getlnx14uat ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition       67108856        878880  -1
[root@getlnx14uat ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3957       3920         36          0         39       3055
-/+ buffers/cache:        825       3132
Swap:        65535        858      64677

2: 關閉Swap交換分區(qū)

[root@getlnx14uat ~]# swapoff /dev/mapper/VolGroup00-LogVol01
[root@getlnx14uat ~]# swapon -s
Filename                                Type            Size    Used    Priority

3: 這里是縮小Swap分區(qū)大小,如果是增大Swap分區(qū)大小,那么就需要擴展正在使用的swap分區(qū)的邏輯卷,此處使用lvreduce命令收縮邏輯卷。

[root@getlnx14uat ~]# lvreduce -L 8G /dev/mapper/VolGroup00-LogVol01
  WARNING: Reducing active logical volume to 8.00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol01? [y/n]: y
  Reducing logical volume LogVol01 to 8.00 GB
  Logical volume LogVol01 successfully resized

4:格式化swap分區(qū)

[root@getlnx14uat ~]# mkswap /dev/mapper/VolGroup00-LogVol01
Setting up swapspace version 1, size = 8589930 kB

5:啟動swap分區(qū),并增加到/etc/fstab自動掛載

[root@getlnx14uat ~]# swapon -s
Filename                                Type            Size    Used    Priority
[root@getlnx14uat ~]# swapon /dev/mapper/VolGroup00-LogVol01
[root@getlnx14uat ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition       8388600 0       -1

Swap交換分區(qū)概念

 

參考資料:

https://wiki.archlinux.org/index.php/swap

http://blog.csdn.net/tianlesoftware/article/details/8741873

http://www.makeuseof.com/tag/swap-partition/

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI