linux 内存

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, 达到不同的清理目的

原文地址:https://www.cnblogs.com/jycjy/p/6864327.html