Linux下缓存机制释放和buffer/cache/swap清理实例分析
(1)缓存机制
为了提高文件系统性能,内核使用一部分物理内存来分配缓冲区用于缓存系统操作和数据文件。当内核收到读或写请求时,内核首先去缓存区查找是否有请求的数据。如果有则直接返回。如果没有,则直接通过驱动程序操作磁盘。
缓存机制的优点:减少系统调用次数,减少CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间。当时间片用完时,内核收回p处理器从正在运行的进程中删除,同时更改当前进程的进程。保存运行状态,然后加载下一个任务。这个过程称为上下文切换。本质上是在终止运行的进程和待运行的进程之间进行进程切换。
(2)检查缓存和内存使用情况
[root@localhost ~]# free -m
strong>
已缓存的空闲共享缓冲区总数
内存:7866 7725 1411974 6897
-/+ 缓冲区/缓存 strong>: 752 7113
交换: 16382 32 16350
您可以看到总内存是8G,已经使用了7725M,还剩下141M,很多人都是这样看的,但是并不能作为实际使用率。因为有缓存机制,具体怎么计算特别地?
可用内存 = 可用内存 (141) + 缓冲区 (74) + 缓存 (6897)
已用内存 = 总计 (7866) - 可用内存< /strong>
由此计算可用内存为7112M,已用内存内存为754M,这是真实的使用率,也可以参考-/+ buffers/cache line信息这也是正确的内存使用率。
(3)可见,缓存分为缓冲区和缓存。它们之间有什么区别?
内核分配缓冲区大小是为了保证系统能够使用物理内存和数据量正常读写。 缓冲区用于缓存元数据和页面,可以理解为系统缓存例如vi打开一个文件。 cached用于缓存文件,可以理解为数据块缓存例如dd if=/dev/zero of=/tmp/test count=1 bs= 当1G测试写入文件时,会缓存在缓冲区中。下次执行该测试命令时,写入速度会明显加快。
(4)你能告诉我Swap是用来做什么的吗?
Swap是指交换分区。通常我们所说的虚拟内存是从硬盘中划分出来的一个分区。当物理内存不够的时候,内核会释放一些缓存区(buffers/cache)中长期没有使用的程序,然后将这些程序暂时放入Swap中。也就是说,如果物理内存和缓存区内存不够,到时候才会使用Swap。
交换清理:
swapoff -a && swapon -a
注意:清理这样有一个前提条件,空闲内存必须大于已使用的交换空间
(5)如何释放缓冲内存?
a) 直接更改内核运行参数
释放内存的Linux命令:
sync
echo 1 > /proc/sys/vm/drop_caches
drop_caches的值可以在0-3之间,数字代表不同的含义:< /strong>
0:不释放(系统默认值)
1:释放页面缓存
2:释放dentry和inode
3:释放所有缓存
释放内存后,再改回来,让系统自动重新分配内存。
echo 0 >/proc/sys/vm/drop_caches
free -m #检查内存是否已释放。
如果我们需要释放所有缓存,请输入以下命令:
echo 3 > /proc/sys/vm/drop_caches
b) 您还可以使用 sysctl 重置 kernel运行参数
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< br/>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
以上设置技术比较粗糙,使得缓存基本无法发挥其作用。需要根据机器的状况进行适当的调整以找到最佳的折衷方案。
感谢您的阅读!这篇关于《Linux下Cache机制释放与清理Buffer/cache/swap实例分析》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人看到!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Linux下缓存机制释放和buffer/cache/swap清理实例分析