若是有空閒RAM,如何清空交換?

當我打開一個RAM密集型應用程序(VirtualBox設置爲2GB RAM)時,一般會使用一些交換空間,具體取決於我當時打開的其餘內容。算法

可是,當我退出最後一個應用程序時,2GB的RAM被釋放,但仍然使用相同的交換空間。ubuntu

例如,就在關閉VirtualBox大約兩個小時後,我有1.6GB的可用內存,仍然有770MB的交換空間。api

如何告訴Ubuntu中止使用該交換並恢復使用RAM?

圖片描述

僅僅由於分配了交換,並不意味着它被「使用」。雖然系統監視器和頂部等程序會顯示一些交換空間被分配(在您的示例中爲770MB),但這並不意味着系統正在主動交換/轉出。緩存

要查明是否有任何內容正在交換,您可使用該vmstat命令。讓它運行幾秒鐘以穩定並觀察si(swapin)和so(swapout )列。若是什麼也沒發生,那就沒有理由擔憂。bash

這是運行的輸出vmstat 1,在那裏你能夠看到個人機器根本沒有交換。
圖片描述
Ubuntu底層的Linux內核會根據須要自動將這些頁面從磁盤「交換」到RAM中,因此通常來講我會說讓它天然發生。app

可是,若是你真的以爲你須要強制它,(我能夠看到你想知道系統將在稍後響應的狀況)你能夠暫時禁用並從新啓用交換性能

sudo swapoff -a
sudo swapon -a

或者做爲單行優化

swapoff -a; swapon -a

圖片描述

圖片描述
您還能夠將默認值設置爲「swappiness」值,這樣交換開始時就不會變得如此之大。當建議值爲10時,爲何出貨默認設置爲60。來自Ubuntu SwapFAQ:spa

Ubuntu中的默認設置是swappiness = 60。減小swappiness的默認值可能會提升典型Ubuntu桌面安裝的總體性能。建議使用swappiness = 10的值,但能夠隨意進行實驗。rest

經過將此值更改成10或甚至0,您能夠爲具備慢速驅動器的舊系統添加顯着且可感知的速度提高。將此值設置爲0不會爲Linux內核3.4及更低版本關閉掉掉,可是若是要將其保持在最低設置*,則須要使用3.5+。

我認爲沒有理由不將其設置爲0,由於任何擊中磁盤的東西都比RAM慢。我有8個虛擬內核,一個快速SSD和8 GB內存,個人交換設置爲0.到目前爲止,我有3臺虛擬機正在運行,個人內存使用量爲7.1 GB,我使用的交換僅爲576KB 952MB,全部系統都運行順暢!

來自Ubuntu SwapFAQ:

swappiness參數控制內核將進程從物理內存移出到交換磁盤上的趨勢。由於磁盤比RAM慢得多,因此若是進程過於積極地移出內存,這可能會致使系統和應用程序的響應時間變慢。

swappiness的值能夠介於0到100之間
swappiness = 0告訴內核儘量長時間地避免將進程交換出物理內存
swappiness = 100告訴內核積極地將進程交換出物理內存並將它們移動到交換緩存
如下是檢查swappiness,清空交換以及將swappiness更改成0的基本說明:

要檢查swappiness值:

cat /proc/sys/vm/swappiness

暫時將交換設置爲0(如SpamapS所示):

這將清空您的交換並將全部交換轉移回內存。首先經過查看gnome-system-monitor的資源選項卡確保您有足夠的可用內存,您的可用內存應該大於您使用的交換。此過程可能須要一段時間,請使用gnome-system-monitor來監視和驗證進度。

sudo swapoff --all

要將新值設置爲0:

sudo sysctl vm.swappiness=0

從新打開交換:

sudo swapon --all

要將swappiness永久設置爲0:

sudoedit /etc/sysctl.conf

添加行 vm.swappiness = 0

sudo shutdown -r now #re restart系統

*使用內核版本3.5+設置swappiness爲0確實徹底關閉它,若是你想要最低的swappiness算法,建議設置爲1。來源:https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

圖片描述

我發現清空交換對於磁盤速度慢且RAM有限的系統有很大幫助。固然,正如已經提到的,執行此操做的方法是運行sudo swapoff -a; sudo swapon -a。這裏的問題是,若是沒有足夠的RAM,這樣作會致使各類各樣的問題。

我寫了一個我稱之爲toggle_swap, 過去幾年對我有用的腳本。在實際禁用交換以前,它會檢查足夠的可用RAM。以下:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

在使用swappiness幾天後,我得出的結論是應該讓內核本身的管理設備。它知道它在作什麼,它通過優化,能夠爲您提供最佳體驗。

除非你有充分的理由想要恢復該磁盤,不然我會留下它。

https://help.ubuntu.com/commu...

相關文章
相關標籤/搜索