Linux系统通过复杂的缓存机制来提升I/O性能,主要包括以下几种缓存类型:
/proc/sys/vm/dirty_*
参数调整写回行为free -h # 查看内存使用情况(关注buff/cache列)
vmstat 1 # 监控系统整体状态
sar -r 1 # 内存使用统计
# 查看页面缓存详细信息
cat /proc/meminfo
# 监控文件系统缓存
cat /proc/slabinfo | grep -E 'dentry|inode_cache'
# 使用pcstat查看文件缓存情况(需安装)
pcstat /path/to/file
# 调整脏页写回阈值(单位:百分比)
echo 10 > /proc/sys/vm/dirty_background_ratio
echo 20 > /proc/sys/vm/dirty_ratio
# 调整脏页最长驻留时间(单位:百分之一秒)
echo 3000 > /proc/sys/vm/dirty_expire_centisecs
# 调整swappiness(0-100,值越低越避免交换)
echo 10 > /proc/sys/vm/swappiness
posix_fadvise()
指导内核缓存策略O_DIRECT
标志绕过页面缓存tmpfs
内存文件系统数据库服务器:
# 减少文件系统缓存,为数据库缓冲池留更多内存
echo 1 > /proc/sys/vm/drop_caches
内存紧张系统:
# 更频繁回收inode/dentry缓存
echo 1000 > /proc/sys/vm/vfs_cache_pressure
# 手动释放缓存(生产环境慎用)
echo 1 > /proc/sys/vm/drop_caches # 释放页面缓存
echo 2 > /proc/sys/vm/drop_caches # 释放slab缓存
echo 3 > /proc/sys/vm/drop_caches # 释放全部
# 使用ftrace跟踪页面缓存行为
echo function > /sys/kernel/debug/tracing/current_tracer
echo mm_filemap_* > /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace_pipe
perf工具:分析缓存命中率
perf stat -e cache-references,cache-misses <command>
bcc工具集:动态追踪缓存行为
cachestat # 监控缓存统计
cachetop # 类似top的缓存使用监控
SystemTap:深度分析缓存机制
通过合理理解和优化Linux缓存机制,可以显著提升系统I/O性能,特别是在高负载、数据密集型应用中效果尤为明显。