『壹』 【轉載】Linux SWAP 深度解讀
SWAP,即交換分區或文件,在Linux系統中主要負責內存管理。當系統內存使用緊張時,SWAP會將部分內存中的數據交換到硬碟上的SWAP空間中,以避免系統因內存不足導致崩潰。其工作原理與內存回收緊密相關,內核在監測到內存壓力時,會調用shrink_zone()方法進行內存縮減,進而觸發SWAP操作。SWAP分區的優先順序功能允許在多個SWAP分區存在時,系統在使用SWAP時優先考慮優先順序高的分區。SWAP的使用調節通過swappiness參數來控制,該參數定義內核對SWAP的積極程度,數值越高表示更傾向於使用SWAP。kswapd進程則周期性地檢測內存使用情況,達到一定閾值時啟動內存回收,包括可能的SWAP操作。
水位標記(watermark)是描述內存使用壓力的概念,包括high、low、min三種標記,分別表示內存可用性。內存回收行為基於剩餘內存的水位標記進行決策,當剩餘內存低於low標記時,kswapd開始進行內存回收,直至剩餘內存達到high標記停止。min標記則觸發直接回收,避免內存使用量過大導致系統崩潰。
zone_reclaim_mode參數用於管理內存區域(zone)內部或外部的內存回收選項,它允許系統選擇優先從當前zone內部回收內存還是從其他zone尋找空閑內存。在NUMA架構中,這可以優化內存使用,提高應用性能。min_unmapped_ratio參數表示每個內存區域未映射頁數的百分比閾值,當相關區域內存使用達到這個百分比時,才會觸發區域內存回收。page-cluster參數控制從SWAP空間讀取數據時的預讀頁數,以提高磁碟讀取效率。
SWAP的優先順序、水位標記、內存回收策略、NUMA架構下的內存管理以及page-cluster參數等,共同構成了Linux系統的內存管理機制。正確理解和應用這些機制,可以有效優化系統性能,避免內存不足引發的問題。在不同的系統負載下,SWAP的使用策略也應靈活調整,以適應實際需求,確保系統穩定運行。
『貳』 Linux - Swap
首先,swap是硬碟上的一塊空間。
其次,當內存沒有多餘空間的時候,可以將一部分數據交換到swap空間。也就是將內存中的一部分數據放到硬碟中,並釋放內存空間。這樣,釋放出的內存空間就又可以被利用來存儲其他數據了。
這樣,本來只有4G的內存,如果swap有2G的話,可使用的內存可以認為是6G。
但是,硬碟的速度比內存慢太多太多了。因此swap只是對內存的一種補充,是在內存不足時對內存的擴充,但是不能代替內存使用。
內存不足時, 操作系統 會選擇 最久沒被使用的內存數據 ,交換到swap空間。
注意,交換操作是由操作系統來進行的。
系統在什麼情況或條件下才會使用Swap分區的空間呢? 其實是Linux通過一個參數swappiness來控制的。當然還涉及到復雜的演算法。
這個參數值可為 0-100,控制系統 swap 的使用程度。
0告訴內核盡可能的不要將內存數據移到swap中,也即只有在迫不得已的情況下才這么做,而100告訴內核只要有可能,盡量的將內存中不常訪問的數據移到swap中。默認值為 60。注意:這個只是一個權值,不是一個百分比值,涉及到系統內核復雜的演算法
查看當前系統中swappiness的值
修改當前系統中swappiness的值
上面通過sysctl修改的swappiness值在系統重啟後會失效,要想重啟後繼續生效,需要修改配置文件/etc/sysctl.conf,將下面這行修改成10,如果文件中找不到這行的話,在文件末位加上這行就可以了
既然配置swap對桌面系統有幫助,那麼配置多少大小的swap比較合適呢?下面是ubuntu給出的建議:
Linux下有兩種類型的swap空間,swap分區和swap文件,他們有各自的特點:
swap分區上面由於沒有文件系統,所以相當於內核直接訪問連續的磁碟空間,效率相對要高點,但由於swap分區一般安裝系統時就分配好了了,後期要縮減空間和擴容都很不方便。
swap文件放在指定分區的文件系統裡面,所以有可能受文件系統性能的影響,但據說2.6版本以後的內核可以直接訪問swap文件對應的物理磁碟地址,相當於跳過了文件系統直接訪問磁碟,不過如果swap文件在磁碟上的物理位置不連續時,還是會對性能產生不利影響,但其優點就是靈活,隨時可以增加和移除swap文件。
如果配置有多個swap分區或者文件的話,這里將會有多行,每行代表一個正在被系統使用的swap分區或文件,下面是每個欄位的意思:
並不是swap空間佔用多就一定性能下降,真正影響性能是swap in和out的頻率,頻率越高,對系統的性能影響越大,我們可以通過vmstat命令來查看swap in/out的頻率
在添加swap分區前,首先得有一個空閑的分區,如果是一塊新的磁碟,可以用fdisk來創建一個新的分區用於swap。
添加swap文件就簡單多了,也沒有分區操作那麼有風險。
通過如下命令,能查看所有進程的使用swap情況
查看某個進程swap佔用內存大小腳本:
查看所有進程使用swap情況腳本:
『叄』 Linux swap分區必需要建立嗎 詳細�0�3
Linux 把物理內存劃分作稱為分頁(Page)的內存區塊。內存交換是一個內存分頁被復制到一個預配置的稱為 swap 空間的硬碟空間里的過程,以此來釋放內存分頁。物理內存與這個 swap 空間的共同大小稱為可用的虛擬內存量。 在這里,保留 swap分區有兩個重要的原因。 其一,當物理內存不足以支撐系統和應用程序(進程)的運作時,這個 swap 空間可以用作臨時存放使用率不 用程序(進程)使用。 再有,即使你的機器擁有足夠多的物理內存,也有一些程序會在它們初始化時殘留的極少再用到的內存分頁內 容轉移到 swap 空間,以此讓出物理內存空間。對於有發生內存泄漏幾率的應用程序(進程),swap 空間更是 重要,因為誰也不想看到由於物理內存不足導致系統崩潰。 如果你需要在 Ubuntu 下跑虛擬機或者常用休眠(Hibernate),推薦劃分 swap 空間。 如果在使用過程中想要清空 swap 空間,可以先禁用 swap,然後再次啟用。以 Ubuntu為例, sudo swapoff -a sudo swapon -a 通過系統監視器,例如 gnome-system-monitor,你就可以看到 swap 空間的內容被轉移到了物理內存中。 可能也許你不習慣把一個分區留給 swap,那麼也可以使用一個文件作為 swap 空間,設置方法如下。但是這樣 確實不如 swap 分區的性能來得好。 打開控制台,創建一個 512MB 的文件用作 swap: sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512 格式化這個 swap 文件作為內存交換設備: sudo mkswap /mnt/512Mb.swap 添加這個 swap 文件到系統: sudo swapon /mnt/512Mb.swap * 要在開機時就使用這個 swap 文件,需要編輯配置文件: gksudo gedit /etc/fstab * 在 /etc/fstab 最末加入這一行: 重啟即可生效。
『肆』 【轉載】Linux SWAP 深度解讀
Linux SWAP深度解讀如下:
1. SWAP的基本功能: SWAP,即交換分區或文件,在Linux系統中負責內存管理。 當系統內存使用緊張時,SWAP會將部分內存中的數據交換到硬碟上的SWAP空間中,以避免系統因內存不足導致崩潰。
2. SWAP的工作原理: 與內存回收緊密相關,內核在監測到內存壓力時,會調用shrink_zone方法進行內存縮減,進而觸發SWAP操作。 kswapd進程周期性地檢測內存使用情況,達到一定閾值時啟動內存回收,包括可能的SWAP操作。
3. SWAP的使用調節: 通過swappiness參數來控制,該參數定義內核對SWAP的積極程度。 數值越高,表示系統更傾向於使用SWAP。 SWAP分區的優先順序功能允許在多個SWAP分區存在時,系統優先考慮優先順序高的分區進行SWAP操作。
4. 內存使用壓力與回收策略: 水位標記描述內存使用壓力,包括high、low、min三種標記。 當剩餘內存低於low標記時,kswapd開始進行內存回收,直至剩餘內存達到high標記停止。 min標記則觸發直接回收,避免內存使用量過大導致系統崩潰。 zone_reclaim_mode參數用於管理內存區域內部或外部的內存回收選項,優化內存使用。 min_unmapped_ratio參數表示每個內存區域未映射頁數的百分比閾值,達到此閾值時觸發區域內存回收。
5. 提高磁碟讀取效率: pagecluster參數控制從SWAP空間讀取數據時的預讀頁數,以提高磁碟讀取效率。
6. SWAP與系統性能優化: 正確理解和應用SWAP的優先順序、水位標記、內存回收策略等機制,可以有效優化系統性能。 在不同的系統負載下,SWAP的使用策略應靈活調整,以適應實際需求,確保系統穩定運行。