linux cache buffer区别,Linux buffer/cache异同

buffers与cached

1)、异同点

在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写 数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得非常低下,因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种情况下,Linux引入了buffers和 cached机制。

buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers 与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操 作系统的性能。但buffers与cached缓冲的内容却是不同的。

buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。

#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------缓存释放后,内存使用情况(KB):----------------------" free cached1=`free |grep Mem:|awk ‘{print $7}‘` buffers1=`free |grep Mem:|awk ‘{print $6}‘` date1=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date2=`date +"%Y%m%d%H%M%S"` echo -e "----------------------首次读取大文件后,内存使用情况(KB):----------------------" free cached2=`free |grep Mem:|awk ‘{print $7}‘` buffers2=`free |grep Mem:|awk ‘{print $6}‘` #echo $date1 #echo $date2 interval_1=`expr ${date2} - ${date1}` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date4=`date +"%Y%m%d%H%M%S"` echo -e "----------------------再次读取大文件后,内存使用情况(KB):----------------------" free cached3=`free |grep Mem:|awk ‘{print $7}‘` buffers3=`free |grep Mem:|awk ‘{print $6}‘` #echo $date3 #echo $date4 interval_2=`expr ${date4} - ${date3}` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------统计汇总数据如下:----------------------" echo -e "首次读取大文件,cached增量:${cached_increment1},单位:KB" echo -e "首次读取大文件,buffers增量:${buffers_increment1},单位:KB" echo -e "首次读取大文件,耗时:${interval_1},单位:s \n" echo -e "再次读取大文件,cached增量:${cached_increment2},单位:KB" echo -e "再次读取大文件,buffers增量:${buffers_increment2},单位:KB" echo -e "再次读取大文件,耗时:${interval_2},单位:s"

执行结果如下(由于打印出来的free结果跟参数赋值时用的free命令之间有时间间隔,计算起来可能会略有不同):

1531137921329697.png

#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------缓存释放后,内存使用情况(KB):----------------------" free cached1=`free |grep Mem:|awk ‘{print $7}‘` buffers1=`free |grep Mem:|awk ‘{print $6}‘` date1=`date +%s.%N` find /* -name *.conf >2 date2=`date +%s.%N` echo -e "----------------------首次查询后,内存使用情况(KB):----------------------" free cached2=`free |grep Mem:|awk ‘{print $7}‘` buffers2=`free |grep Mem:|awk ‘{print $6}‘` #echo $date1 #echo $date2 interval_1=`echo "scale=3; ${date2} - ${date1}" | bc` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +%s.%N` find /* -name *.conf >2 date4=`date +%s.%N` echo -e "----------------------再次查询后,内存使用情况(KB):----------------------" free cached3=`free |grep Mem:|awk ‘{print $7}‘` buffers3=`free |grep Mem:|awk ‘{print $6}‘` #echo $date3 #echo $date4 interval_2=`echo "scale=3; ${date4} - ${date3}" | bc` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------统计汇总数据如下:----------------------" echo -e "首次查询,cached增量:${cached_increment1},单位:KB" echo -e "首次查询,buffers增量:${buffers_increment1},单位:KB" echo -e "首次查询,耗时:${interval_1},单位:s \n" echo -e "再次查询,cached增量:${cached_increment2},单位:KB" echo -e "再次查询,buffers增量:${buffers_increment2},单位:KB" echo -e "再次查询,耗时:${interval_2},单位:s"

结果如下(最后那个应该是0.470702440,使用bc计算的时候那个0被去掉了):

1531137931993397.png

2、内存释放

Writing to this will cause thekernel to drop clean caches, dentries and inodes from memory, causing thatmemory to become free. To free pagecache: echo 1 > /proc/sys/vm/drop_caches To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches To free pagecache, dentries andinodes: echo 3 > /proc/sys/vm/drop_caches As this is a non-destructiveoperation and dirty objects are not freeable, the user should run `sync‘ first. http://www.kernel.org/doc/Documentation/sysctl/vm.txt

# cat /proc/sys/vm/drop_caches

0

默认是0,1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存

[root@hps103 ~]# sync [root@hps103 ~]# free -m total used free shared buffers cached Mem: 499 323 175 0 52 188 -/+ buffers/cache: 82 416 Swap: 2047 0 2047 [root@hps103 ~]# echo 3 > /proc/sys/vm/drop_caches [root@hps103 ~]# free -m //发现缓存明显减少了 total used free shared buffers cached Mem: 499 83 415 0 1 17 -/+ buffers/cache: 64 434 Swap: 2047 0 2047

原文:https://www.cnblogs.com/AmilyWilly/p/9285048.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql中join与left-join图解区别

select a.* from YG_BRSYK a left join(SELECT DISTINCT SYXH,STUFF((SELECT 、MS FROM #lsb where SYXHt.SYXH FOR XML PATH()),1,1,) AS MSFROM #lsb as t) c on a.SYXHc.SYXH WHERE c.MS IS NOT NULL order by RYBQ --注:left join...on 为左关联,保…

很遗憾,自然语言理解是AI尚未攻克的领域

来源: Venture Beat作者: Pieter Buteneers编译: 科技行者短短几年之内,深度学习算法得到了长足发展,不仅在棋类游戏中击败了全球最顶尖的选手,也能够以等同于、甚至超越人类的准确率识别人脸。但事实证明,人类语言仍是一项独特且…

jsp+javabean实现购物车

采用Model1(jspjavabean) 实现DBHelper类创建实体类创建业务逻辑类(dao) DBHelper类的设计package util;import java.sql.Connection; import java.sql.DriverManager;public class DBHelper {private static final String drive…

里程碑 | 原来大脑有两套GPS!陆军军医大学张生家团队发现海马外全新空间导航系统...

来源:iNature位置细胞,网格细胞,边界细胞和头部方向细胞的空间选择性激发是构成以海马-肠内复合体为中心的典型空间导航系统的基本构建块。虽然可以在整个大脑中找到头部方向细胞,但是海马结构外部的空间调节通常与其他表示形式&a…

iar 连接linux开发板,LED裸机程序(IAR)

LED裸机程序(IAR)一、实验环境开发环境:IAR5.30开发板:UT-S3C6410开发工具:JLINK V8二、实验目的在无操作系统的开发板上,运行程序,掌握裸机程序的开发过程,熟悉IAR和JLINK的使用。三、实验步骤1、准备工作…

简易呼吸灯c语言程序,呼吸灯 - 单片机教程 - C语言网

1.双定时器呼吸灯实现呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出,接着又由小到大的占空比输出,小灯显示效果就是时亮时暗地交替闪烁。首先我们用定时器0定时0.1ms,全局变量pwm在其中断函数里执行简单的从0到…

Python学习---面向对象的学习[深入]

类的深入学习 a. Python中一切事物都是对象 b. class Foo: pass obj Foo() # obj是对象,Foo类 # Foo类也是一个对象,type的对象 c. 类都是type类的对象 type(..) “对象”都是以类的对象 类() d. 类实际上是type类型的对象,所有的…

TCP/IP模型

应用层(会话层,表示层,应用层) HTTP FTP DNS 传输层(传输层) TCP UDP 网际层(网络层) IP 网络接口层(物理层…

c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

《c语言程序设计》课程设计报告-职工信息管理系统.doc还剩24页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容…

今年,自动驾驶卡车将在无人驾驶的情况下上路

文章来源:IEEE电气电子工程师Photo: TuSimpleFirst in Freight: In 2021, San Diego–based startup TuSimple plans to deploy autonomous trucks that drive themselves from pickup to delivery without anybody on board.Tesla、Uber、Cruise和Waymo等公司承诺&…

线上服务CPU100%问题快速定位实战

功能问题,通过日志,单步调试相对比较好定位。 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。 58到家架构部,运维部,58速运技术部联合进行…

最新研究:超级人工智能,从理论上就无法控制

文章来源:机器之心作者:Charles Q. Choi 编辑:泽南、杜伟近日,一项新的研究发现,从理论上来看,人类不可能控制超级人工智能。更为糟糕的是,这项研究也明确了人类无法在这种 AI 生成之时发现它…

看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

来源: 脑极体2020年已经过去,无论我们过得顺遂平安,还是过得无比艰难,我们应该都会记住这一年。回顾2020年,在这个不同寻常的疫情之年,科技成为人类抗击疫情的关键,而人工智能技术投入抗疫战争之…

2021年值得关注的人工智能与机器学习的五大趋势

文章来源:科技心时代人工进行智能和机器可以学习是市场上的热门专业技术,其重要性在2020年达到顶峰,这两种信息技术发展已经到了广泛应用在各行业领域,其范围从电子商务到量子计算管理系统,从医疗诊断分析系统到消费电…

城市生态的机器人革命

来源: 脑极体城市居民能看到绿色、与自然亲近的机会,被高楼大厦挤压得越来越少,如果有一天,连机器人、无人车和无人机都要来侵占人类的休闲空间,会发生什么呢?至少目前看来,如果不采取措施&…

数据通信基础知识

常用的两种入网方式: 1. 电话线入网 电话线发出来的是数字信号,需要用调制解调器(🐱)转换位模拟信号 例如:我计算机发 在吗 ,电话线发出来是01011100, 调制解调器把数字信号转为模拟信号发到广域网 之…

android okhttpclient设置编码,Android之okhttp实现socket通讯(非原创)

文章大纲一、okhttp基础介绍二、socket通讯代码实战三、项目源码下载四、参考文章一、okhttp基础介绍二、socket通讯代码实战1. 添加依赖和权限app的build.gradle下添加okhttp依赖implementation com.squareup.okhttp3:okhttp:3.8.1AndroidManifest.xml文件添加网络权限2. 添加…

张小龙两小时演讲全文:微信十年的产品思考

来源:微信公开课(ID:wx-gongkaike)文:张小龙大家好!谢谢来到公开课现场的朋友们,让我感受到这是一个面对面的交流,而不是一个人面对屏幕的直播。2020,对很多人来说都是很…

android url格式化,Android利用SpannableString实现格式化微博内容

前言在Android开发中,有许多信息展示需要通过TextView来展现,如果只是普通的信息展现,使用TextView setText(CharSequence str)设置即可,但是当在TextView里的这段内容需要截取某一部分字段,可以被点击以及响应响应的操…

2021年中国AIoT产业全景图谱

来源:物联网智库(iot101)编辑:蒲蒲日前,在“2020 AIoT产业年终盛典”上,物联网智库正式发布全新升级版的《2021中国AIoT产业全景图谱报告》(以下简称“报告”)。据悉,这是…