free -m命令 及 内存cached释放

 

 

马哥教育关于linux内存的文章,一看就懂:https://mp.weixin.qq.com/s/VoRiJpmcYZptLumuT-N-wA

     在工作中经常会遇到Linux内存很大,却被cached占了大部分的内存空间,导致linux开始启用swap的情况

                —— 机器性能下降。

    总内存有128G,cached占用了108G,造成系统不得不使用swap内存,而导致性能下降,速度变慢

     wKiom1nMkDHSeihvAAAYMFPk230424.png

buffer,cached的作用:

     cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .


     Free  中  的   “ buffer和cache:(它们都是占用内存)”
     buffer : 作为buffer cache的内存,是块设备(磁盘)的缓冲区,包括读、写磁盘
     cache: 作为page cache的内存, 文件系统的cache,包括读、写文件
     如果 cache 的值很大,说明cache住的文件数很多。

 

     为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

 

如何解决这个导致机器变慢的问题呢?
罪魁祸首就是内存都被cached了,free的基本没有了
所以我们应该想想如何把cached内存释放出来
重启机器肯定是可以解决,但是我们肯定是不能用这样的办法
 
释放方法有三种(系统默认值是0,释放之后你需要再改回0值):
    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 and inodes:  echo 3 > /proc/sys/vm/drop_caches

    常用方法是:echo 1 > /proc/sys/vm/drop_caches

注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上

    执行上面的命令,可以释放了大概40G的cached空间

     wKioL1nMk_myh8MHAAAYp4hcr1o225.png

经常使用rsync传输大量数据的朋友可能遇到过类似的情况:开始是传输大量文件过去,到后来传输的数据并不大,但就是很慢很慢,到对边的服务器上看会发现在终端输入命令都不会觉得慢,但看内存使用情况时,发现free的内存很少,几乎接近零了,我觉得可能就是内存都被cached了导致的
 
为什么我们要释放掉cached内存?因为我们用rsync传输大量数据的时候,linux系统将一部分文件的信息缓存在内存中,这样是可以减少频繁使用的文件的磁盘IO时间占用,当我们传完一批文件后,我们要传输另外一批文件过去,是完全不同的文件或者文件的内容发生了变化,内存中缓存的文件也不是我们需要的了,我们需要清空缓存,腾出内存用来传输下一批文件使用,这个时候我们急切的需要看到更多的内存是free状态的。
 
在这样的前提下,我们有必要自己手动清空缓存,腾出更多可用内存来
 



除了释放掉cached内存以外,还需要设置vm.swappiness的值,以尽大限度的使用物理内存

    查看vm.swappiness参数的值:

        #sysctl -q vm.swappiness

    临时设置vm.swappiness的值(重启后生效)

        #sysctl vm.swappiness=10

    永久设置vm.swappiness:

        echo "vm.swappiness = 10" >> /etc/sysctl.conf

 

 

 

 

 

linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位)。而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内存有如下几个加减法:

  • used=total-free  total=used+free
  • 实际内存占用:used-buffers-cached 即 total-free-buffers-cached
  • 实际可用内存:buffers+cached+free

                   total       used       free     shared    buffers     cached
Mem:            128        119           8          0            1               22
-/+ buffers/cache:        95          32
swap:          255            0         255

 

第1行Mem数据:

  • total 内存总数: 128
  • used 已经使用的内存数: 119
  • free 空闲的内存数: 8
  • shared 当前已经废弃不用,总是0
  • buffers Buffer Cache内存数: 1
  • cached Page Cache内存数: 22

第2行-/+ buffers/cache:

  • -buffers/cache 的内存数:95 (等于第1行的 used - buffers - cached)
  • +buffers/cache 的内存数: 32 (等于第1行的 free + buffers + cached)

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三行数据是交换分区SWAP的,也就是我们通常所说的虚拟内存。

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

感兴趣的可以进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,比如procps-3.2.3-5.3.src.rpm。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值