1.问题描述:
free -g Free里面的值为0就是内存已经耗尽了,没有内存可用了吗?
答案:非也!因为Linux对内存的管理与Windows不同,Linux 优先使用物理内存,当物理内存还有空闲时,linux是不会施放内存的,即时占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。这样做的好处是,启动那些刚开启过的程序、或是读取刚存取过得数据会比较快,对于服务器很有好处。free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/ buffers/cache: 3948 4031 ,这才是系统可用的内存大小。
2.测试
[root@node2 ~]# free -h total used free shared buffers cached Mem: 3.7G 1.2G 2.5G 482M 63M 912M -/+ buffers/cache: 249M 3.5G Swap: 3.9G 0B 3.9G [root@node2 ~]# dd if=/dev/zero of=tem1p bs=1M count=400 #可以生成一个实际的400M的文件,文件会写入硬盘 400+0 records in 400+0 records out 419430400 bytes (419 MB) copied, 0.656023 s, 639 MB/s [root@node2 ~]# date Thu Sep 3 00:15:17 PDT 2020 [root@node2 ~]# free -h total used free shared buffers cached Mem: 3.7G 1.6G 2.1G 482M 63M 1.3G -/+ buffers/cache: 261M 3.5G Swap: 3.9G 0B 3.9G [root@node2 ~]# date Thu Sep 3 00:15:48 PDT 2020 [root@node2 ~]# free -h total used free shared buffers cached Mem: 3.7G 1.6G 2.1G 482M 63M 1.3G -/+ buffers/cache: 260M 3.5G Swap: 3.9G 0B 3.9G [root@node2 ~]# sync [root@node2 ~]# free -h total used free shared buffers cached Mem: 3.7G 1.6G 2.1G 482M 63M 1.3G -/+ buffers/cache: 260M 3.5G Swap: 3.9G 0B 3.9G [root@node2 ~]# cat /proc/sys/vm/drop_caches 0 [root@node2 ~]# echo 3 > /proc/sys/vm/drop_caches #echo 3 > /proc/sys/vm/drop_caches; free pagecache, dentries and inodes [root@node2 ~]# free -h total used free shared buffers cached Mem: 3.7G 778M 3.0G 482M 792K 539M -/+ buffers/cache: 237M 3.5G Swap: 3.9G 0B 3.9G
3.相关解释
1.free -m命令解释
2./proc/sys/vm/drop_caches解释
/proc/sys/vm/drop_caches默认是0
# echo 1 > /proc/sys/vm/drop_caches; free pagecache, use
# echo 2 > /proc/sys/vm/drop_caches; free dentries and inodes
# echo 3 > /proc/sys/vm/drop_caches; free pagecache, dentries and inodes
注意:使用之前需要先sync,将缓存刷到磁盘中。
可以看出,/proc/sys是一个虚拟文件系统,可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。其默认数值为0.
向/proc/sys/vm/drop_caches中写入内容,会清理缓存。建议先执行sync(sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)。执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的