linux系统运维之,你知道linux真实剩余内存吗?回收?

tech2025-08-31  6

背景

我们在使用linux系统时经常会使用free -m 来查看linux内存剩余的大小,比如

这里看到空闲的内存大小已经非常小只剩88M,首先看下各个字段的解释:

total: 系统中的可用物理内存used: 已使用的物理内存free: 剩余多少物理内存可用shared: 共享使用的物理内存buff/cache: buffer 和 cache 使用的物理内存available: 可被回收的内存

Linux真实剩余内存

linux系统在运行时,free剩余屋里内存会在一个稳定值运行,看上去可能比较小。那么真实的剩余内存数量是多少?

这里可以简单理解为available是真的剩余内存,粗略计算也就是free + buff/cache的值,这个值会比available略高,available值是减去了不可回收的内存。

linux内存回收

这样运行是没有问题的,但是当某个程序需要一整块物理内存时,这时候就会申请不到可以的内存,此时我们就需要来释放内存,以便于后续的程序运行,可以使用如下命令来回收内存,在执行前需要使用sysn先将内存数据回写到磁盘。

echo 1 > /proc/sys/vm/drop_caches #表示清除pagecache。 echo 2 > /proc/sys/vm/drop_caches #清除回收slab分配器中的对象 echo 3 > /proc/sys/vm/drop_caches #表示清除pagecache和slab分配器中的缓存对象。

在回收内存时,系统IO会升高,此时内核在对比cache中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收,所以尽量在空闲时来执行。

定时检查自动回收内存

我们也可以内存剩余定义一个阈值比如剩余20%时,脚本在晚上某个时间段或者空闲时段来执行内存回收。

#!/bin/bash MEM_TOTAL=`free -m |grep Mem: | awk '{print $2}'` MEM_FREE=`free -m |grep Mem: | awk '{print $4}'` MEM_USE=`free -m |grep Mem: | awk '{print $3}'` if [ $MEM_USE -gt 0 ]; then MEM_PRO=0`echo "scale=2;$MEM_FREE/$MEM_TOTAL" | bc` echo "$(date) free proportion $MEM_PRO" >>/var/log/mem.log mem_threshold='0.20' mem_now=`expr $MEM_PRO \> $mem_threshold` if [ $mem_now -eq 0 ]; then sync sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches fi fi

写在最后

今天就写这么多,喜欢大叔的可以关注我哦_

最新回复(0)