1)缓存机制介绍
在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

2)查看缓存区及内存使用情况

1
2
3
4
5
[root@localhost ~] # free -m
              total       used        free      shared    buffers     cached
Mem:          7866       7725        141         19         74       6897
-/+ buffers /cache :        752       7113
Swap:        16382         32      16350

从上面的命令结果显示中可以看出:内存总共8G,已使用7725M,剩余141M,不少的人都是这么看的。
但其实这样并不能作为实际的使用率。因为有了缓存机制,具体算法如下:
空闲内存=free(141)+buffers(74)+cached(6897)
已用内存=total(7866)-空闲内存
由此算出空闲内存是7112M,已用内存754M,这才是真正的使用率,也可参考-/+ buffers/cache这行信息也是内存正确使用率。

3)缓存区分buffers和cached区别
内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。
buffers用来缓存metadata及pages,可以理解为系统缓存,例如,vi打开一个文件。
cached是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。

4)Swap用途
Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
swap清理:
swapoff -a && swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

5)释放缓存区内存的方法
    a)清理pagecache(页面缓存)

1
# echo 1 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=1

  b)清理dentries(目录缓存)和inodes

1
# echo 2 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=2

  c)清理pagecache、dentries和inodes

1
# echo 3 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=3

  上面三种方式都是临时释放缓存的方法,要想永久释放缓存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!

另外,可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和它们占用的内存

1
# sync

--------------------友情提示一下----------------------
上面操作在大多数情况下都不会对系统造成伤害,只会有助于释放不用的内存。
但是如果在执行这些操作时正在写数据,那么实际上在数据到达磁盘之前就将它从文件缓存中清除掉了,这可能会造成很不好的影响。那么如果避免这种事情发生呢?
因此,这里不得不提一下/proc/sys/vm/vfs_cache_pressure这个文件,告诉内核,当清理inoe/dentry缓存时应该用什么样的优先级。

1
2
3
4
5
6
7
8
9
10
vfs_cache_pressure=100    这个是默认值,内核会尝试重新声明dentries和inodes,并采用一种相对于页面缓存和交换缓存比较”合理”的比例。
减少vfs_cache_pressure的值,会导致内核倾向于保留dentry和inode缓存。
增加vfs_cache_pressure的值,(即超过100时),则会导致内核倾向于重新声明dentries和inodes
总之,vfs_cache_pressure的值:
小于100的值不会导致缓存的大量减少
超过100的值则会告诉内核你希望以高优先级来清理缓存。
其实无论vfs_cache_pressure的值采用什么值,内核清理缓存的速度都是比较低的。
如果将此值设置为10000,系统将会将缓存减少到一个合理的水平。

释放内存前先使用sync命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

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

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

释放完内存后改回去让系统重新自动分配内存。
echo 0 >/proc/sys/vm/drop_caches

其他参考:

http://www.cnblogs.com/kevingrace/p/5991604.html

https://linux.cn/article-5627-weibo.html

http://www.cnblogs.com/focai/p/5829897.html

http://blog.csdn.net/u014227228/article/details/46848623

Linux系统清除缓存【整理】相关推荐

  1. 清理linux的缓存文件,linux系统清理缓存教程

    今天用spot on light 查了一下开发服务器的内存占用,只剩下60MB,用下面的方法就可以实现清空缓存频繁的文件访问会导致系统的Cache使用量大增.接下来是小编为大家收集的linux系统清理 ...

  2. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  3. linux系统清除redis信息

    清除redis中指定信息 小知识点记录一下: 需求:用户是否点击管关闭弹出框,这个信息是在redis中存储的,清除redis中某个信息: 步骤: 1.Linux系统任意目录下 redis-cli  进 ...

  4. linux系统清空缓存

    背景 linux系统内存free不足了,但是buff/cache还挺多,执行命令释放cache所占空间 解决 同步数据到磁盘 sync 根据需求清除对于缓存 echo 3 > /proc/sys ...

  5. Linux系统监控命令整理汇总-掌握CPU,内存,磁盘IO等找出性能瓶颈

    的性能有问题,总之,每到晚上挖站否的主机就出现了不稳定的情况,系统负载忽高忽低.利用服务器日志分析利器:ngxtop和GoAccess也能查出有一些IP一直在不断地扫描服务器端口还有WP后台. 但是, ...

  6. Linux定时清除缓存脚本与清除命令

    1.脚本cleanCache.sh vim cleanCache.sh #!/bin/bash #每两小时清除一次缓存 echo "开始清除缓存" sync;sync;sync # ...

  7. linux系统基本命令自我整理

    linux系统基本命令整理 这是我自己在学习过程中整理的一些基础命令,希望可以帮助到你们 ls相关命令 ls 查看当前目录下的列表 ls -l 详细信息,后面如果加上文件名就是查询目录下文件 的详细信 ...

  8. Linux系统清理缓存方法

    Linux运行主要看物理内存和交换空间SWAP(虚拟内存)的使用情况,一般物理内存小则设置虚拟内存大点,物理内存大,则设置虚拟内存小点. 在旧版系统中虚拟内存常常设置为物理内存的两倍,但是新版新硬件, ...

  9. c语言linux系统时间,【整理】C语言设置Linux系统时间 | 勤奋的小青蛙

    今晚完成一个小功能,C语言设置下Linux系统时间.代码如下: #include #include #include #include using namespace std; using std:: ...

最新文章

  1. 强烈安利!这个私藏已久的神器!
  2. pytorch 自定义参数不更新
  3. 【LDA学习系列】Latent Dirichlet Allocation主题模型理解
  4. Java 的这 100 个坑,我发誓不会再踩了
  5. mysql int 优化_MySQL数据类型优化—整数类型优化选择
  6. Canny边缘检测及C++实现(转载)
  7. python and financial data_学会7个可视化图表增强技巧(Python),毫不费力抓住领导的眼球
  8. mongodb dbref java_Spring DATA MongoDB @DBref查询,or和and联合查询
  9. python加载机制_yui3与python模块加载机制感悟
  10. 松下服务器没显示,松下Panasonic伺服驱动器没有显示维修
  11. swift项目:微博
  12. Automated System Call Filtering for Commodity Software 翻译
  13. 计算机系统类型64位,详细教你怎么看电脑是32位还是64位
  14. [UVA 202]Repeating Decimals
  15. 基于Fortran的结构力学位移法编程求解
  16. fzyczn生日赛t1 CZN
  17. 远程GPU服务器运行Python
  18. shell脚本回车换行_终于搞懂了回车与换行的区别
  19. vue如何把html转换word,vue导出html、word和pdf的实现代码
  20. C# 下载gif图片,动画丢失,解决办法

热门文章

  1. 计算机网络在铁路信号中的应用,计算机网络在铁路信号中应用.doc
  2. 从一个导出的DMP文件中,导入某一个表
  3. 计算机无法复制大文件格式,U盘单个文件过大无法复制怎么办?如何将U盘FAT32转NTFS格式?...
  4. gin框架35--静态文件服务
  5. 对打造执行力强的开发团队的思考和探索 -- 组建团队
  6. 初一计算机的硬件和软件ppt,计算机的硬件和软件.ppt
  7. 什么是高阶函数?数组中的高阶函数有哪些?
  8. 谈谈未来移动互联网的三大趋势
  9. 计算机科学与技术专业研究生分数线,同济大学计算机科学与技术专业考研录取分数线-研究生分数线-历年分数线...
  10. 单片机,独立按键,(STC89C51)