1. 调整脏页缓存参数
脏页是已修改但未写入磁盘的内存页,合理设置脏页比例可平衡缓存效率与磁盘I/O。通过vm.dirty_ratio(脏页占内存的最大比例)和vm.dirty_background_ratio(触发后台写回的脏页比例)参数,减少频繁的磁盘写操作。例如:
echo 40 > /proc/sys/vm/dirty_ratio # 脏页占比上限设为40%
echo 10 > /proc/sys/vm/dirty_background_ratio # 后台写回阈值设为10%
可通过sysctl -p使设置永久生效。
2. 优化vfs_cache_pressure参数
vm.vfs_cache_pressure控制内核回收inode和dentry缓存的倾向,默认值100表示积极回收。降低该值(如50)可增加文件系统缓存(如目录项、inode),减少重复的磁盘元数据读取:
echo 50 > /proc/sys/vm/vfs_cache_pressure
sysctl -w vm.vfs_cache_pressure=50
```。
**3. 控制swappiness参数**
`vm.swappiness`决定内核使用交换分区(Swap)的倾向,值越高越易将内存数据换出到磁盘。减少Swap使用可避免磁盘I/O瓶颈,建议设为10以下(如10):
```bash
echo 10 > /proc/sys/vm/swappiness
sysctl -w vm.swappiness=10
```。
### 二、使用高效的挂载选项
**1. 启用noatime挂载**
`noatime`选项禁用文件访问时间的更新,减少不必要的磁盘写操作。编辑`/etc/fstab`文件,在对应挂载点添加`noatime`选项(如根分区):
```bash
/dev/sda1 / ext4 defaults,noatime 0 0
修改后重新挂载:
mount -o remount /
```。
**2. 使用relatime挂载(可选)**
若需保留访问时间的基本功能(如邮件客户端),可使用`relatime`选项,仅在访问时间超过24小时或文件被修改时更新,平衡性能与功能:
```bash
/dev/sda1 / ext4 defaults,relatime 0 0
```。
### 三、采用高级缓存技术
**1. 使用tmpfs缓存临时文件**
`tmpfs`是将内存作为文件系统的虚拟文件系统,适合存储临时文件(如`/tmp`),避免磁盘I/O。编辑`/etc/fstab`添加:
```bash
tmpfs /tmp tmpfs defaults,size=512M 0 0
或临时挂载:
mount -t tmpfs -o size=512M tmpfs /tmp
```。
**2. 配置SSD缓存(Bcache/LVM Cache)**
对于HDD,可使用SSD作为缓存设备加速读写:
- **Bcache**:将SSD作为HDD的缓存层,需安装`bcache-tools`并配置内核模块;
- **LVM Cache**:通过LVM将SSD创建为缓存卷,关联到HDD逻辑卷。
具体步骤可参考CentOS文档或社区指南。
### 四、优化应用程序缓存
**1. 使用内存缓存系统**
通过Redis、Memcached等内存缓存系统,存储频繁访问的数据(如数据库查询结果、会话信息),减少对磁盘的直接访问。例如,用Redis缓存数据库查询:
```python
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
data = r.get('key') # 先从Redis获取
if not data:
data = query_database() # 若Redis无数据,再查数据库
r.set('key', data) # 存入Redis
```。
**2. 应用层优化I/O操作**
- 使用`pread`/`pwrite`系统调用:避免改变文件偏移量,减少磁盘寻址时间;
- 批量读写:合并多个小I/O操大操作,降低磁盘寻道次数;
- 异步I/O:使用`libaio`库实现非阻塞I/O,提高并发效率。
### 五、监控与持续调优
**1. 监控缓存与I/O性能**
使用以下工具定期检查系统状态:
- `free -h`:查看内存与缓存使用情况;
- `vmstat 1`:监控内存、I/O、CPU等指标;
- `iostat -x 1`:查看磁盘I/O详细信息(如读写延迟、吞吐量);
- `iotop`:识别高I/O消耗的进程。
**2. 定期清理缓存(谨慎使用)**
若内存紧张,可手动清理缓存释放内存,但会暂时降低缓存命中率:
```bash
sync && echo 3 > /proc/sys/vm/drop_caches # 清理页缓存、dentry、inode缓存
建议在低峰期操作,避免影响业务。
通过以上方法,可有效利用CentOS的缓存机制减少磁盘I/O,提升系统整体性能。需根据实际场景(如内存大小、磁盘类型、应用需求)调整参数,避免过度优化导致系统不稳定。