CentOS系统内存使用问题(内存是拿来用的,而不是拿来看的)

查看内存使用:

  查看Linux服务器下的内存使用情况,可以使用命令free -m。针对于服务器内存使用过高查询和问题排查:

参数说明:

  used:已经使用的内存数

  free:空闲的内存数

  shared:多个进程共享的内存总额  

  cacged:系统以分配未使用内存,缓存内存数

  -buffers/cache:(已用)的内存数,即used-buffers-cached

  +buffers/cache:(可用)的内存数,即free+buffers+cached

得出结论:

  可用内存的计算公式为:

    可用内存=free+buffers+cached,即0+0+53=53

所以:内存是拿来用的,而不是拿来看的

清除缓存

  Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

Linux用指令来释放缓存方法Linux用指令来释放缓存方法

  所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

  0 – 不释放

  1 – 释放页缓存

  2 – 释放dentries和inodes

  3 – 释放所有缓存

  知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

  首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

# 释放缓存区内存的方法
1)清理pagecache(页面缓存)
 echo 1 > /proc/sys/vm/drop_caches  or sysctl -w vm.drop_caches=1
2)清理dentries(目录缓存)和inodes
 echo 2 > /proc/sys/vm/drop_caches  or sysctl -w vm.drop_caches=2
3)清理pagecache、dentries和inodes
 echo 3 > /proc/sys/vm/drop_caches  or sysctl -w vm.drop_caches=3

修改/etc/sysctl.conf vm.drop_caches = 3 然后sysctl -p
root下配置调度
10 22 * * * echo 3 > /proc/sys/vm/drop_caches
原文地址:https://www.cnblogs.com/Tang-Yuan/p/14651578.html