<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="Linux 释放物理内存和虚拟内存">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2020-03-11 14:35<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
Linux 释放物理内存和虚拟内存


１．查看内存占用情况




$ 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 &gt; /proc/sys/vm/drop_caches


(3) 释放完内存后改回去让系统重新自动分配内存


$ echo 0 &gt; /proc/sys/vm/drop_caches


可能会遇到了 &quot;bash: /proc/sys/vm/drop_caches: Permission denied&quot;的问题，即使加上sudo也不行．

原因：重定向符号 &ldquo;&gt;&rdquo; 和 &quot;&gt;&gt;&quot; 也是 bash 的命令。使用 sudo 只是让 echo 命令具有了 root 权限，但是没有让 &ldquo;&gt;&rdquo; 和 &quot;&gt;&gt;&quot; 命令也具有 root 权限，所以 bash 会认为这两个命令都没有向 drop_caches 文件写入信息的权限。

解决方法：

方法一是利用 &quot;sh -c&quot; 命令，它可以让 bash 将一个字串作为完整的命令来执行，这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下：


$ sudo sh -c 'echo 3 &gt; /proc/sys/vm/drop_caches'


方法二是利用管道和 tee 命令，该命令可以从标准输入中读入信息并将其写入标准输出或文件中，具体用法如下：


$ echo 3 | sudo tee -a /proc/sys/vm/drop_caches


注意，tee 命令的 &quot;-a&quot; 选项的作用等同于 &quot;&gt;&gt;&quot; 命令，如果去除该选项，那么 tee 命令的作用就等同于 &quot;&gt;&quot; 命令。

参考：https://zhidao.baidu.com/question/1111512531871775459.html

３．释放虚拟内存

(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


 具体情况自行修改命令。


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
