linux缓存中的数据如何释放,Linux中的内存知识梳理以及buffer/cache是否需要清理?...

Linux中的内存知识梳理以及buffer/cache是否需要清理?

前言

服务器跑了很久,有时候用free  -m显示free内存很小而buffer/cache很大,很多人就觉得需要清理释放缓存,让free的值增大才可以舒心。其实这么做意义不大,我们一起来学习下。

查看内存状态

free 默认是以kb为单位显示

free -m 以M为单位显示

free -g 以G为单位显示。

c28a6636c47bdae89ec6c0b63717c5db.png

buffer和cache区别及用途

buffer(缓冲区)

核心作用就是用来缓冲,是为了提高内存和硬盘(或其他I/0设备)之间的数据交换的速度而设计的,比如每秒写100次硬盘,对系统冲击很大,浪费了大量的时间在处理写和结束写。引用Buffer后,可以暂存起来变成每10s写一次硬盘,对系统冲击很小,保护了硬盘,一般也可理解为数据从高速设备(内存)到低速设备(硬盘)的一个缓冲区。

cache(缓存)

核心作用是加快取用速度,比如已经做了一个复杂的计算,下次还要用结果,cache就可以把计算的结果进行缓存,等下一次系统调用时,直接调用缓存,加速了数据取用的速度。

注意:不要误解,Buffer就是用来写的, cache就是用来读的。读也可以用buffer。

如何回收buffer/cache(所谓的清理内存)

回收的两种模式

1.自动回收:Linux内核会在内存将要耗尽的时候,触发内存回收工作,以便释放内存给急需的内存进程使用。

2.手动回收:主动给内核发送数字信号,根据不同信号的意义,触发相应的回收策略

echo 1 > /proc/sys/vm/drop_caches

表示清除pagecache。

echo 2 > /proc/sys/vm/drop_caches

表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。

echo 3 > /proc/sys/vm/drop_caches (清理范围最大的一种方式)表示清除page cache和slab分配器中的缓存对像

清理内存操作

1. sync  先执行sync命令,用于将所有未写的缓冲区写入同步到磁盘中

2. echo 3 > /proc/sys/vm/drop_caches    不同数字有着不同的清理范围,3的范围最大,清理最多。

说明:/proc 是系统的虚拟文件系统,可以通过修改proc目录下的数值对系统内核进行调整。

回收是有代价的

清理缓存的操作不是没有成本的,cache是缓存,清理缓存尽可能要保证cache中的缓存数据和对应文件中的数据一致,才能对cache释放。因为伴随着cache清除的行为,内核要对比cache中的数据对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。这样的话系统IO会变的很高。

cache都能被回收么

tmpfs中存储的文件会占用cache空间,除非文件删除否则这个cache不会被自动释放。

使用shmget方式申请的共享内存会占用cache空间,除非共享内存被ipcrm或者使用shmctl去IPC_RMID,否则相关的cache空间都不会被自动释放。

使用mmap方法申请的MAP_SHARED标志的内存会占用cache空间,除非进程将这段内存munmap,否则相关的cache空间都不会被自动释放。

实际上shmget、mmap的共享内存,在内核层都是通过tmpfs实现的,tmpfs实现的存储用的都是cache。

总结

Linux服务器为了提高效率,会提前申请内存,即使这些内存没有被具体应用使用,Linux也会提前申请这些内存,然后利用这些内存做缓存用,即将刚打开的文件系统存入cache中,这样对应的服务器free值会越来越少,buffers和cached会越来越大,因此给大家表象就是内存越来越少了,大家就紧张了;其实,大家完全不用紧张,Linux服务器在发现内存不足时,会自动清理cached区域,释放内存,然后继续增大cache,free继续减少。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内存buffer/cache很大是因为Linux系统采用了一种称为页缓存(Page Cache)的机制来提高文件系统的性能。具体来说,当文件被读取到内存时,Linux会将读取到的文件数据缓存内存的页缓存,以便下次访问相同文件时可以直接从页缓存获取,而不需要再次从磁盘读取。这种机制可以大大提升系统IO的性能。 Linux内存buffer/cache的大小受到系统资源管理的影响,它会充分利用可用的内存空间来提供更高效的文件访问。当系统运行时,如果有大量的可用内存,并且没有其他进程需要使用,Linux会将这些多余的内存用于buffer/cache。这样一来,当需要从磁盘读取文件时,大部分情况下可以直接从内存获取,而不必再次访问磁盘,从而大大提高系统的响应速度。 值得注意的是,虽然buffer/cache占用了大量内存,但这些内存并不是完全被占用,而是可以根据需要释放的。当其他程序需要更多的内存时,Linux会自动将buffer/cache数据释放出来,以满足其他程序的需求。这个过程被称为自动缓存(Automatic caching),可以确保系统内存始终处于最佳状态。 总而言之,Linux内存buffer/cache很大是Linux系统为了提高文件系统的性能而采取的一种机制。通过将文件数据缓存内存,可以减少对磁盘的读取操作,从而大大提升了系统的响应速度。同时,这些内存可以根据需要进行释放,确保系统内存始终处于最佳状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值