Linux下缓存机制free及清理buffer/cache/swap的示例分析

59次阅读
没有评论

共计 1917 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章给大家分享的是有关 Linux 下缓存机制 free 及清理 buffer/cache/swap 的示例分析的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

(1)缓存机制

为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。

缓存机制优点:减少系统调用次数,降低 CPU 上下文切换和磁盘访问频率。

CPU 上下文切换:CPU 给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

(2)查看缓存区及内存使用情况

[root@localhost ~]# free -m

total used free shared buffers cached

Mem: 7866 7725 141 19 74 6897

-/+ buffers/cache: 752 7113

Swap: 16382 32 16350

可以看到内存总共 8G,已使用 7725M,剩余 141M,不少的人都是这么看的,这样并不能作为实际的使用率。因为有了缓存机制,具体该怎么算呢?
空闲内存 =free(141)+buffers(74)+cached(6897)
已用内存 =total(7866)- 空闲内存
由此算出空闲内存是 7112M,已用内存 754M,这才是真正的使用率,也可参考 -/+ buffers/cache 这行信息也是内存正确使用率。

(3)可见缓存区分为 buffers 和 cached,他们有什么区别呢?

内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。buffers 用来缓存 metadata 及 pages,可以理解为系统缓存,例如,vi 打开一个文件。cached 是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。

(4)随便说下 Swap 做什么用的呢?

Swap 意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到 Swap 中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到 Swap。

swap 清理:
swapoff -a swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的 swap 空间大

(5)怎样释放缓存区内存呢?
a)直接改变内核运行参数
Linux 释放内存的命令:
sync
echo 1 /proc/sys/vm/drop_caches

drop_caches 的值可以是 0 - 3 之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放 dentries 和 inodes
3:释放所有缓存

释放完内存后改回去让系统重新自动分配内存。
echo 0 /proc/sys/vm/drop_caches

free -m #看内存是否已经释放掉了。

如果我们需要释放所有缓存,就输入下面的命令:
echo 3 /proc/sys/vm/drop_caches

b)也可以使用 sysctl 重置内核运行参数

sysctl -w vm.drop_caches=3

注意:这两个方式都是临时生效,永久生效需添加 sysctl.conf 文件中,一般写成脚本手动清理,建议不要清理。
修改 /etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使 cache 的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

感谢各位的阅读!关于“Linux 下缓存机制 free 及清理 buffer/cache/swap 的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计1917字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)