Linux 釋放物理內存和虛擬內存


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM