Linux脏页相关参数
参数
以下是Linux内核中与脏页(Dirty Page)相关的各个参数及其含义的详细说明:
1. vm.dirty_background_bytes
- 含义:系统内存中脏页数量的绝对字节阈值(单位为字节),当脏页达到此值时,内核会在后台开始异步刷盘(不会阻塞应用程序)。
- 默认值:0(表示禁用,优先使用百分比dirty_background_ratio)
- 优先级:如果设置为非零值,则覆盖dirty_background_ratio。
2. vm.dirty_background_ratio
- 含义:系统内存中脏页占可用内存总量的百分比阈值,当脏页达到此比例时,内核会触发后台异步刷盘。
- 默认值:10(10%)
- 示例:50GB内存的服务器,默认阈值为5GB脏页时触发后台刷盘。
- 调优建议:
- 降低(如5-10):可减少I/O堆积,但可能增加刷盘频率。
- 升高(如20-30):适合写入密集型应用(如RocketMQ),但可能增加数据丢失风险。
3. vm.dirty_bytes
- 含义:系统内存中脏页数量的绝对字节阈值(单位为字节),当脏页达到此值时,应用程序的写入操作会被同步阻塞,直到脏页被写入磁盘。
- 默认值:0(表示禁用,优先使用百分比dirty_ratio)。
- 注意:与dirty_background_bytes不同,此参数触发的是同步刷盘(直接影响应用性能)。
4. vm.dirty_expire_centisecs
- 含义:脏页在内存中最长存活时间(单位:百分之一秒,即10毫秒),超过此时间的脏页会被后台刷盘线程写入磁盘。
- 默认值:3000(即30秒)。
- 调优建议:
- 降低(如1000=10秒):减少数据丢失风险,但增加磁盘I/O压力。
- 升高(如6000=60秒):适合允许短暂数据丢失的高吞吐场景。
5. vm.dirty_ratio
- 含义:系统内存中脏页占可用内存总量的百分比阈值,当达到此比例时,应用程序的写入操作会被同步阻塞(强制刷盘)。
- 默认值:20(20%)。
- 示例:50GB内存的服务器,默认阈值为10GB脏页时阻塞写入。
- 调优建议:
- 降低(如10-15):减少写入延迟,适合低延迟应用。
- 升高(如30-50):适合批量写入场景(如日志处理),但可能增加OOM风险。
6. vm.dirty_writeback_centisecs
- 含义:内核周期性检查脏页的时间间隔(单位:百分之一秒),控制刷盘线程的唤醒频率。
- 默认值:500(即5秒)。
- 调优建议:
- 常规值:500-1000(5-10秒)。
- 写入密集型:可设为200-500(2-5秒)。
不建议超过3000(30秒),否则可能丢失大量数据。
参数关系图
- Linux如何查看dirty相关参数
sysctl -a | grep dirty_