12-05-free -h 内存buffer和cache

参考: free -h详解与内存swap理解_51CTO博客_free swap

【free】 free -h 解读 - 简书

$ free -h

              total        used        free      shared  buff/cache  available

Mem:          251G        130G        2.4G        3.0G        118G        116G

Swap:          15G        15G          0B

total:表示服务器上总共的内存大小,这里是251G。

used:表示服务器当前正在使用的内存大小,这里是130G。(used = total-free-buffers-cache,这里没减去shared,shared应该是used的其中一部分)

free:表示服务器当前没有被使用的内存大小,这里是2.4G。

available:表示当前可用的内存大小,这里是116G。

shared:表示被多个进程共享的内存大小,这里是3.0G。

buff/cache: #缓冲和缓存 buff是用来缓冲文件属性和目录内容的(其实就是inode信息) cached是用来缓冲文件内容的(其实就是data block数据),这里是118G。

 

看free -h的时候看available字段,不应该看缓存,缓存会自动回收的

buff/cache缓存高,说明系统在大量读写,而不是说内存不够。

此时系统的负载可能也比较高,你可以执行top命令看下1,5,15分钟负载。

#2秒执行下free -h命令,执行3次

free -h -s 2 -c 3

通常sftp服务器负载比较高,你可以观察一下。

你也可以按照如下方法回收:

#方法1

#手动执行sync命令,将缓存写入disk,让内核将尽可能多的脏缓存页写入磁盘(以最大化可以丢弃的数据缓存页的数量)。我执行了变化不大,可能脏缓存数据小。

# free -h

total used free shared buff/cache available

Mem: 3.7G 1.1G 435M 344M 2.1G 1.9G

Swap: 8.0G 1.1G 6.9G

# sync

# free -h

total used free shared buff/cache available

Mem: 3.7G 1.1G 434M 344M 2.1G 1.9G

Swap: 8.0G 1.1G 6.9G

#方法2

#使用vm.drop _ caches参数,使用vm.drop _ caches永远不会触发内核丢弃脏缓存。其实和方法1原理差不多

# echo 3 >/proc/sys/vm/drop_caches

#

# free -h

total used free shared buff/cache available

Mem: 3.7G 1.1G 2.1G 344M 518M 2.0G

Swap: 8.0G 1.1G 6.9G

释放页面缓存、数据区和信息节点(一般使用3 或者sync即可)

echo 3 >/proc/sys/vm/drop_caches

释放数据区和信息节点

echo 2 >/proc/sys/vm/drop_caches

释放页面缓存

echo 1 >/proc/sys/vm/drop_caches

二、swap虚拟内存

2.1 总结

​ 当Linux的物理内存快要被耗尽时,系统会把一些进程占用的内存转移到 swap 区,当物理内存被释放一部分时,swap 区的一些内存占用又慢慢回到 mem 区,但是 mem 区却不再是之前的满负荷状态,而是有一部分 free 的内存!

【总结1】

1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory

2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区

3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区

4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级

【总结2】

其实swap是可以关闭的(比如swapon,swapoff命令),有些时候为了追求高性能会这么做,通常为了性能设置在10-30之间比较多。

通常使Swap负载保持在30%以下,这样才能保证系统的良好性能,这是一个参考值。

swap可以是磁盘划分的分区,因此有人叫做交换分区;也可以是某个文件,有方法教如何扩展swap空间。

swap可以设置多个的。

Linux系统的内存管理必须使用交换区来建立虚拟内存(是不是必须有时间测),安装好系统后可以把它关闭掉的。

交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的,此时考虑扩展物理内存,或排查什么程序如此占用内存了;或者服务器很久没有重启,过swap占用过大。

linux下的swap分区触发是由参数控制的,swappiness参数将控制在剩余多少物理内存的时候使用虚拟内存,当然,虚拟内存是在迫不得已的情况就才使用的,否则会

大大降低系统性能。

centos7结果通常是30,30的意思表示在物理内存已经使用了70%的时候(也就是100-30),剩余30%没使用,会开始使用swap虚拟内存。

(个人记忆:swappiness=30表示物理内存只有最后30%可用了,就开始使用swap)。

# cat /proc/sys/vm/swappiness

30

#如何设置合理的swap交换触发点。

#swappiness的值的大小对如何使用swap分区是有着很大的联系的。

swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间。在配置k8s或者其它一些追求高性能的情况,你可能看到关闭swap的分区。

swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

swappiness 这个值应该低一点,系统的性能就比较好,通常为了性能设置在10-30之间比较多。

方式一:临时

sysctl vm.swappiness=10

这种方式是临时修改,重启后将自动还原。

执行下面的命令,使立即生效:

sysctl -p

方式二(永久):

编辑文件 /etc/sysctl.conf,在最下面添加:

kernel.shmall = 4294967296

vm.swappiness=10

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
free -h 是一个Linux命令,用于查看系统的内存使用情况。它会以合适的单位显示内存使用情况,最大为三位数,并自动计算对应的单位值。以下是对 free -h 命令输出结果的详细解释: 第一行显示了系统物理内存的使用情况: - total 列显示系统中内存的总量。 - used 列显示已用内存总量,计算公式为:used = total - free - buffers - cache。 - free 列显示空闲内存容量,即尚未被使用的物理内存数。 - shared 列显示共享内存使用的容量。 - buff/cache 列显示 buffers 和 cache 所用总量的总和。buffers 是内核缓冲区所用的内存,而 cache 是页缓存和 slabs 所用的内存容量。 第二行显示了 swap 交换内存的使用情况: - total 列显示系统中 swap 内存的总量。 - used 列显示已用 swap 内存的总量。 - free 列显示可用 swap 内存的总量。 available 列为一个估算值,表示在不需要将内存交换到磁盘的情况下,从应用程序的角度看到的可用内存数量。 需要注意的是,内核为了提升磁盘操作的性能,会使用一部分内存来缓存磁盘数据(即 buffercache),所以对于内核来说,buffercache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可用,内核会从 buffercache 中回收内存来满足应用程序的请求。因此,从应用程序的角度来看,available = free + buffer + cache。 需要注意的是,这只是一个理想的计算方式,实际中的数据往往有一定误差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夸父手杖

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值