Linux系统通过复杂的缓存机制显著提升I/O性能,主要包含以下几种缓存类型:
# 查看系统内存和缓存使用情况
free -h
# 或
cat /proc/meminfo
工作原理: - 采用LRU(最近最少使用)算法管理 - 读写文件时,数据首先被存入页面缓存 - 脏页(被修改的页面)由pdflush线程定期刷回磁盘
调优参数:
# 查看当前页面缓存参数
sysctl -a | grep vm.dirty_
关键参数:
- vm.dirty_background_ratio
:系统开始后台刷脏页的内存百分比(默认10%)
- vm.dirty_ratio
:进程开始同步刷脏页的内存百分比(默认20%)
- vm.dirty_expire_centisecs
:脏页过期时间(默认3000cs/30秒)
- vm.dirty_writeback_centisecs
:pdflush唤醒间隔(默认500cs/5秒)
# 检查THP状态
cat /sys/kernel/mm/transparent_hugepage/enabled
优点: - 减少TLB失效 - 降低页表遍历开销
缺点: - 可能造成内存碎片 - 某些负载下性能下降
ext4/xfs/btrfs等文件系统的缓存特点: - 元数据缓存(目录结构、inode等) - 日志缓存(Journaling) - 预读机制(readahead)
# 调整文件系统预读(适用于旋转磁盘)
blockdev --setra 8192 /dev/sdX
# 查看块设备I/O统计
iostat -x 1
多级缓存架构: 1. 应用层缓存(如数据库缓冲池) 2. 文件系统缓存 3. 页面缓存 4. 块设备请求队列
# 释放页面缓存
echo 1 > /proc/sys/vm/drop_caches
# 释放目录项和inode缓存
echo 2 > /proc/sys/vm/drop_caches
# 释放所有缓存
echo 3 > /proc/sys/vm/drop_caches
Linux使用"可用内存"概念而非"空闲内存": - 主动回收:kswapd守护进程 - 直接回收:内存不足时同步回收
OOM Killer:
# 查看OOM分数调整
cat /proc/[pid]/oom_score_adj
vmstat:系统内存、交换、I/O统计
vmstat 1
sar:历史性能数据
sar -r 1 3 # 内存使用
sar -B 1 3 # 页面统计
pcstat:查看文件缓存状态
pcstat /path/to/file
ftrace/perf:深入分析缓存行为
数据库服务器:
文件服务器:
通用调优:
# 增加文件描述符限制
echo 65535 > /proc/sys/fs/file-max
# 调整inode缓存压力
sysctl -w vm.vfs_cache_pressure=50
新兴技术:
通过深入理解Linux缓存机制,系统管理员可以针对特定工作负载优化内存使用,显著提高系统I/O性能。