linux buffAndCache过高的研究

buffAndCache介绍

百度:在Linux系统中,buffCache指的是缓冲区(buffer)和缓存(cache)的使用量,它们通常用于提高磁盘操作的效率。当buffCache使用过高
时,可能会对系统性能产生负面影响,然而Linux内核会智能地管理内存,包括使用未分配的内存来缓存文件和磁盘数据,以提高系统性能。导致
过高的原因:
	大量小文件操作:频繁的小文件操作会导致大量的缓存命中,因为每次操作都会涉及到缓存的更新和回收。
	数据库操作:数据库系统,如MySQL或PostgreSQL,由于其频繁的读写操作,会占用大量的缓存。
	日志文件:应用程序的日志文件不断增长也会导致缓存使用增加。
	内存压力:系统内存不足时,内核可能会使用更多的磁盘缓存来作为内存的扩展,这会增加buffCache的使用。
	不合理的缓存管理策略:如果系统的缓存管理策略(如LRU, MRU等)配置不当,可能导致缓存命中率低,增加磁盘I/O。
	
百度提供分析方向,然而我遇到的原因是因为部署了minio,大量上传文件时导致过高的,把minio 部署到其它地方程序就能稳定长时间跑。

buffAndCache组成介绍

1、内存脏页(dirty pages)管理相关的内核参数

1.1 vm.dirty_ratio
描述:这个参数定义了当脏页占可用内存(不包括保留给内核和其他用途的内存)的百分比达到这个值时,系统将阻塞所有写操
作,直到脏页被写回磁盘为止。
默认值:通常是20%(对于大多数Linux发行版,但可能有所不同)。
影响:较高的值可以减少写磁盘操作的频率,但可能会导致更多的内存被脏页占用,增加内存压力。较低的值会增加写磁盘的
频率,但可以减少内存占用。

1.2 vm.dirty_background_ratio
描述:这个参数定义了当脏页占可用内存的百分比达到这个值时,内核将启动后台写操作(即pdflush或kworker/n进程)来将脏页写回磁盘。
默认值:通常是10%(对于大多数Linux发行版,但可能有所不同)。
影响:较高的值可以减少后台写操作的频率,但可能导致脏页积累更多,增加内存压力。较低的值会增加后台写操作的频率,有助于保持较
低的脏页数量,但可能		   会增加磁盘I/O负载。

1.3 永久设置
	1.3.1 通过修改/etc/sysctl.conf文件来永久设置这些参数,例如:
		vm.dirty_ratio = 30  
		vm.dirty_background_ratio = 15
	1.3.2 运行sysctl -p 来应用这些更改
	
1.4 sysctl命令临时设置这些参数,重启后会丢失,例如:
	sysctl -w vm.dirty_ratio=30
	sysctl -w vm.dirty_background_ratio=15
	
1.5 命令查看,例如:
	sysctl vm.dirty_ratio
	sysctl vm.dirty_background_ratio

2、物理内存交换到磁盘

2.1vm.swappiness
描述:vm.swappiness是一个内核参数,用于设置内核使用交换空间的倾向性。它决定了系统在内存压力增大时,是更倾向于使用物理内
存还是交换空间。
参数范围:可以在0到100之间设置。
	低值(接近0):内核将尽可能少地使用交换空间,而更多地依赖于物理内存。这有助于减少磁盘I/O操作,但可能会增加物理内存的使
	用率,当物理内存耗尽时可能导致系统性能下降或崩溃(如out of memory,OOM)。
	高值(接近100):内核将积极使用交换空间,将不常用的内存页面交换到磁盘上。这有助于释放物理内存供其他进程使用,但可能会
	增加磁盘I/O操作,从而影响系统性能。
	默认值(60):表示当剩余物理内存低于40%(100-60=40%)时,开始使用交换空间。这是一个折衷的选择,旨在平衡物理内存和
	交换空间的使用。
	
2.2 永久设置
	2.2.1 通过修改/etc/sysctl.conf文件来永久设置这些参数,例如:
		vm.swappiness=30
	2.2.2 运行sysctl -p 来应用这些更改
	
2.3 sysctl命令临时设置这些参数,重启后会丢失,例如:
	sysctl vm.swappiness=30
	
2.4 命令查看,例如:
	cat /proc/sys/vm/swappiness
	或
	sysctl vm.swappiness

3、控制文件系统缓存(特别是directory和inode cache)的回收倾向

3.1 vm.vfs_cache_pressure
描述:决定了内核在内存压力下回收文件系统缓存(如dentries和inodes)的优先级。通过调整此参数,可以控制系统在内存不足
时,是更倾向于保留文件系统缓存还是回收这些缓存以释放内存。
参数范围:取值范围通常为0到200(尽管某些文档可能指出其范围为0到100,但现代Linux内核可能支持更高的值)
	低值(接近0):内核将倾向于保留文件系统缓存,而不是回收这些缓存以释放内存。这有助于提高文件访问速度,但可能会
	增加内存的使用率。
	高值(接近200):内核将更积极地回收文件系统缓存以释放内存。这有助于在内存压力下保持系统的稳定性,但可能会降
	低文件访问速度。
	默认值(100):表示内核将根据页面缓存(pagecache)和交换缓存(swapcache)的情况,将directory和inode cache保
	持在一个合理的百分比。这是一个折衷的选择,旨在平衡文件系统缓存的使用和内存释放。
	
3.2 永久设置
	3.2.1 通过修改/etc/sysctl.conf文件来永久设置这些参数,例如:
		vfs_cache_pressure=100
	3.2.2 运行sysctl -p 来应用这些更改
	
3.3 sysctl命令临时设置这些参数,重启后会丢失,例如:
	sysctl vm.vfs_cache_pressure=100
	
3.4 命令查看,例如:
	cat /proc/sys/vm/vfs_cache_pressure
	或
	sysctl vm.vfs_cache_pressure

4、tmpfs文件系统,类似于windows的虚拟磁盘

4.1 查看当前系统中的tmpfs
	df -h | grep tmpfs
4.2 创建挂载点
		mkdir /tmp/xkTmpfs
4.3 创建文件系统/修改大小,临时
	sudo mount -t tmpfs -o size=200M tmpfs /tmp/xkTmpfs
4.4 系统重启后自动挂载tmpfs
	4.4.1 打开文件:vi /etc/fstab
	4.4.2 末尾添加
	tmpfs /tmp/xkTmpfs tmpfs defaults,size=200M 0 0

5、清理系统缓存脚本记得管理员运行,清理有可能导致程序奔溃

#!/bin/bash
echo "开始清理缓存"
写入硬盘,防止数据丢失
sync;sync;sync; 
 延迟10S
sleep 10
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "清理缓存结束"

6、补充

6.1 内存详细信息查看:cat /proc/meminfo|grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"
6.2 上面的配置验证好像都没生效,达不到效果,比如想控制缓存不能超过内存的60%,那位大佬看出问题的可以讲解讲解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值