https://www.jianshu.com/p/016f7cf0380d

方法

  1. #free -m
  2. #sync
  3. #echo 1 > /proc/sys/vm/drop_caches
  4. #free -m

解释

  • free-m查看此时内存使用情况
  1. 第一类单位参数:
  2. 1) -b, bytes Byte为单位显示内存使用情况
  3. 2) -k, kilo KB为单位, 这也是默认值
  4. 3) -m, mega MB为单位显示内容使用情况
  5. 4) -g, giga GB为单位显示内存使用情况
  6. 第二类参数:
  7. 1)、 -h, human 自动将数值转换为人类易读形式
  8. 2)、 -c, count 展示结果count次,需与-s配合使用
  9. 3)、 -s, seconds 动态刷新内存使用情况的间隔
  10. free -m各字段含义
  11. 第一部分Mem行:
  12. ========================
  13. total 内存总数: 3865M
  14. used 已经使用的内存数: 1545M
  15. free 空闲的内存数: 2320M
  16. shared 多个进程共享的内存总额 196M
  17. buffers Buffer 缓存内存数: 176M
  18. cached Page 缓存内存数:569M
  19. 关系:total (3865M) = used(1545M) + free(2320M)
  20. 第二部分(-/+ buffers/cache):
  21. ========================
  22. (-buffers/cache) used内存数:798M
  23. (指的第一部分Mem行中的used buffers cached)
  24. 即为1545 176 569 = 800 取整时计算差异 2M
  25. (+buffers/cache) free内存数: 3066M
  26. (指的第一部分Mem行中的free + buffers + cached)
  27. 即为2320 + 176 + 569 = 3065 取整时计算差异 1M
  28. 第三部分是指交换分区
  29. ========================
  30. 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。这些被释放的进程被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。所以swap分区不被占用或者占用很少,说明现在系统内存够用,运行还算良好,不会影响系统运行
  • 释放前最好sync一下,防止丢数据.因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。

  • 开始清理

echo 1 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

  • 清理后内存使用情况

free -m

【Shell】清理内存 - 图1

/proc/sys是一个虚拟文件系统,可以通过对它的读写操作做为与kernel实体间进行通信的一种手段 也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整 那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。其默认数值为0.

向/proc/sys/vm/drop_caches中写入内容,会清理缓存 建议先执行sync(sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件) 执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的

问题


1. 在终端输入“sudo echo 3 > /proc/sys/vm/drop_caches”后提示权限不够
sudo仅让echo命令有了权限,而 > 命令没有权限
解决办法,将整个命令以字符串形式赋予权限并执行
sudo bash -c “echo 3 > /proc/sys/vm/drop_caches”