在调整缓存前,需先了解系统内存及缓存的当前状态。常用命令:
free -h:查看内存使用概况(包括buff/cache列,显示被缓存的内存量);vmstat 1:实时监控内存、缓存、I/O等性能指标;sar -r 1:查看内存使用趋势(包括缓存的变化)。文件系统缓存(Page Cache、Buffer Cache)是Linux缓存的核心,直接影响文件读写性能。关键参数及调整建议:
vm.dirty_ratio:当脏页(已修改但未写入磁盘的内存页)占总内存的百分比达到此值时,系统会同步写回脏页(阻塞应用层IO)。建议设置为20%-30%(高负载写入场景可适当提高,避免频繁同步导致性能下降)。vm.dirty_background_ratio:当脏页占比达到此值时,系统会后台异步写回脏页(不影响应用层IO)。建议设置为10%-15%(平衡后台写入与应用性能)。vm.vfs_cache_pressure:控制内核回收inode/dentry缓存(用于加速文件路径查找)的倾向。值越高,回收越积极(适合内存紧张场景);值越低,缓存保留越多(适合频繁访问文件的场景)。建议设置为50-100(默认100,可根据文件访问频率调整)。vm.swappiness:控制内核使用交换空间(Swap)的倾向(0-100)。值越低,越倾向于保留内存中的缓存(适合内存充足、追求性能的场景);值越高,越倾向于使用Swap(适合内存紧张的场景)。建议设置为10-30(避免过度使用Swap导致性能骤降)。vm.min_free_kbytes:设置系统保留的最小空闲内存量(单位:KB),确保系统有足够缓冲空间应对突发内存需求。建议设置为物理内存的1%-2%(如8GB内存可设置为81920-163840KB),避免因内存耗尽导致OOM(Out of Memory)。/sys/block/sda/queue/write_cache启用写缓存(echo 1 > /sys/block/sda/queue/write_cache),提升写入性能;noop或deadline调度器(echo noop > /sys/block/sda/queue/scheduler),减少不必要的调度开销。/proc/sys/net/core/rmem_max、/proc/sys/net/core/wmem_max、/proc/sys/net/ipv4/tcp_rmem、/proc/sys/net/ipv4/tcp_wmem),提升网络传输性能(如设置net.ipv4.tcp_rmem = 4096 87380 16777216,分别对应接收缓冲区的最小、默认、最大值)。调整参数后,需通过性能测试验证效果:
sysbench fileio测试文件读写性能;fio模拟应用IO负载(如数据库、Web服务),观察延迟、吞吐量变化;free -h、vmstat监控缓存命中率(如buff/cache占用是否合理、脏页回写是否及时)。# 创建清理脚本
echo 'sync; echo 3 > /proc/sys/vm/drop_caches' > /home/bin/cleancache.sh
chmod +x /home/bin/cleancache.sh
# 添加定时任务(每3小时执行一次)
echo "0 */3 * * * /home/bin/cleancache.sh" >> /etc/crontab
(注:清理缓存会导致短暂IO升高,建议在低峰期执行。)通过以上步骤,可综合系统内存、应用负载、硬件配置等因素,合理设置Linux缓存大小,实现性能与资源的平衡。需注意的是,不同场景(如数据库服务器、Web服务器、桌面环境)的缓存需求差异较大,建议根据实际情况针对性调整。