ubuntu缓存优化实践
导读:Ubuntu缓存优化实践 一 核心原理与监控 Linux/Ubuntu 会利用空闲内存做三层缓存:Page Cache(页缓存)、dentry/inode 缓存,显著减少对磁盘的读写次数,从而提升响应速度与吞吐。读多写少的场景受益最大。写...
Ubuntu缓存优化实践
一 核心原理与监控
- Linux/Ubuntu 会利用空闲内存做三层缓存:Page Cache(页缓存)、dentry/inode 缓存,显著减少对磁盘的读写次数,从而提升响应速度与吞吐。读多写少的场景受益最大。写操作先进入页缓存,由内核异步刷盘,既提速又合并随机写。监控建议:
- 内存与缓存概览:
free -m、cat /proc/meminfo - 实时资源与 I/O:
vmstat 1、iotop - 历史 I/O:
sar -b - 原则:缓存是“好”的,通常无需频繁清理;应优先识别 I/O 瓶颈与异常进程,再决定是否调优或清理。
- 内存与缓存概览:
二 内存与页面缓存优化
- 调整 Swap 倾向(swappiness):降低值可减少换出,适合内存充足或交互/低延迟场景。示例:
- 查看:
cat /proc/sys/vm/swappiness - 临时:
sudo sysctl -w vm.swappiness=10 - 永久:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf & & sudo sysctl -p
- 查看:
- 脏页刷盘策略(writeback):在内存充裕、I/O 设备较慢时,适度提高阈值可减少刷盘次数、提升吞吐;在数据可靠性优先(数据库、交易)场景应更积极刷盘。示例(按内存比例):
sudo sysctl vm.dirty_background_ratio=5sudo sysctl vm.dirty_ratio=10sudo sysctl vm.dirty_expire_centisecs=30000sudo sysctl vm.dirty_writeback_centisecs=5000- 持久化:写入
/etc/sysctl.conf后sysctl -p
- 手动清理缓存(仅在特殊场景使用,如基准测试、空间紧张或异常回收抖动):
sync & & echo 1 | sudo tee /proc/sys/vm/drop_caches(仅 PageCache)sync & & echo 2 | sudo tee /proc/sys/vm/drop_caches(仅 dentry/inode)sync & & echo 3 | sudo tee /proc/sys/vm/drop_caches(全部)- 注意:清理是临时的,系统会很快重新占用缓存;频繁清理会损害性能。
三 磁盘与文件系统缓存优化
- 选择合适的文件系统:通用负载选 ext4;大文件/高并发选 XFS;需要快照/校验/压缩选 Btrfs/ZFS(功能强但复杂度更高)。
- 挂载选项优化(减少元数据写、提升并发/压缩等):
- ext4:
defaults,noatime,nodiratime,data=writeback - XFS:
defaults,noatime,logbufs=8,logbsize=256k - Btrfs:
defaults,noatime,compress=zstd,space_cache=v2
- ext4:
- I/O 调度器(SSD/NVMe 更偏好低开销策略):
- 查看:
cat /sys/block/< dev> /queue/scheduler - 建议:SSD/NVMe 用 noop 或 deadline;HDD 可用 mq-deadline/cfq(视内核版本与设备而定)
- 查看:
- 临时目录与缓存放置:将
/tmp、~/.cache等指向 tmpfs(内存文件系统)可加速临时文件与缓存访问,注意内存压力与容量。示例 fstab 条目:tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 - 硬件侧:优先 SSD/NVMe,其低延迟与高 IOPS 能显著放大缓存与异步刷盘的优势。
四 应用层与系统服务缓存
- APT 包缓存清理(释放磁盘空间,不影响运行时性能):
sudo apt clean(清空已下载包)sudo apt autoclean(清理旧版本包)sudo apt autoremove --purge(移除无用依赖与旧内核)
- DNS 缓存:部署 dnsmasq 并开启缓存,减少外网 DNS 往返。示例:
sudo apt install dnsmasq,在/etc/dnsmasq.conf设置cache-size=512或cache-mem=512(单位依版本/配置),重启服务。 - 编译缓存:使用 ccache 或 sccache 缓存编译产物,显著加速重复构建。示例:
sudo apt install ccache,在构建环境设置CC=ccache gcc或CC=sccache gcc。 - 应用数据缓存:面向业务的数据层可使用 memcached(内存键值缓存)减轻后端压力。示例:
sudo apt install memcached,在/etc/memcached.conf设置-m 1024(单位 MB),重启服务。
五 快速检查清单与注意事项
- 检查清单(按场景执行):
- 内存与缓存:
free -m、vmstat 1、iotop - 磁盘与 I/O:
df -h、sudo du -sh /* | sort -h、sar -b - 日志与临时:
sudo journalctl --vacuum-time=3d、sudo journalctl --vacuum-size=100M - Snap 缓存:
sudo rm -rf /var/lib/snapd/cache/*
- 内存与缓存:
- 注意事项:
- 缓存是性能关键路径,优先“调优策略”而非“清空缓存”。
- 修改
swappiness、dirty_*等内核参数务必在测试环境验证,观察延迟与抖动。 - 涉及磁盘与分区操作前做好备份与回滚方案;变更
fstab后先mount -a校验。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu缓存优化实践
本文地址: https://pptw.com/jishu/774889.html
