當我打開一個RAM密集型應用程序(VirtualBox設置爲2GB RAM)時,一般會使用一些交換空間,具體取決於我當時打開的其餘內容。算法
可是,當我退出最後一個應用程序時,2GB的RAM被釋放,但仍然使用相同的交換空間。ubuntu
例如,就在關閉VirtualBox大約兩個小時後,我有1.6GB的可用內存,仍然有770MB的交換空間。api
僅僅由於分配了交換,並不意味着它被「使用」。雖然系統監視器和頂部等程序會顯示一些交換空間被分配(在您的示例中爲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,全部系統都運行順暢!
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幾天後,我得出的結論是應該讓內核本身的管理設備。它知道它在作什麼,它通過優化,能夠爲您提供最佳體驗。
除非你有充分的理由想要恢復該磁盤,不然我會留下它。