1.查看內存占用情況
$ free -m -h total used free shared buff/cache available Mem: 7.7G 1.0G 5.9G 385M 780M 6.0G Swap: 7.4G 1.0G 6.4G
2.釋放物理內存
(1) 釋放內存前先使用sync命令做同步,以確保文件系統的完整性,將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。
$ sync
(2) 然后通過修改proc系統的drop_caches清理free的cache
$ echo 3 > /proc/sys/vm/drop_caches
(3) 釋放完內存后改回去讓系統重新自動分配內存
$ echo 0 > /proc/sys/vm/drop_caches
可能會遇到了 "bash: /proc/sys/vm/drop_caches: Permission denied"的問題,即使加上sudo也不行.
原因:重定向符號 “>” 和 ">>" 也是 bash 的命令。使用 sudo 只是讓 echo 命令具有了 root 權限,但是沒有讓 “>” 和 ">>" 命令也具有 root 權限,所以 bash 會認為這兩個命令都沒有向 drop_caches 文件寫入信息的權限。
解決方法:
方法一是利用 "sh -c" 命令,它可以讓 bash 將一個字串作為完整的命令來執行,這樣就可以將 sudo 的影響范圍擴展到整條命令。具體用法如下:
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
方法二是利用管道和 tee 命令,該命令可以從標准輸入中讀入信息並將其寫入標准輸出或文件中,具體用法如下:
$ echo 3 | sudo tee -a /proc/sys/vm/drop_caches
注意,tee 命令的 "-a" 選項的作用等同於 ">>" 命令,如果去除該選項,那么 tee 命令的作用就等同於 ">" 命令。
參考:https://zhidao.baidu.com/question/1111512531871775459.html
3.釋放虛擬內存
(1) 關停swap分區(釋放虛擬內存):
$ sudo swapoff -a
注意:要保證物理內存剩余量要大於等於swap使用量,否則不能成功釋放虛擬內存.(根據內存機制,swap分區一旦釋放,所有存放在swap分區的文件都會轉存到物理內存上)例如:
$ sudo swapoff -a swapoff: /dev/sdb8: swapoff failed: Cannot allocate memory
如果成功關停swap分區,可以看到Swap這一行的狀態顯示全0:
$ free -m -h total used free shared buff/cache available Mem: 7.7G 1.7G 4.9G 732M 1.1G 4.9G Swap: 0B 0B 0B
(2) 再開啟swap分區:
$ sudo swapon -a
這時可以看到swap分區free==total,used=0
$ free -m -h total used free shared buff/cache available Mem: 7.7G 1.7G 4.8G 740M 1.1G 4.9G Swap: 7.4G 0B 7.4G