查看内存使用:
查看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