对于高并发的 Linux 主机来说,优化脏页相关的参数是为了更好地平衡内存缓存与磁盘 I/O 性能。这些参数的设置取决于多种因素,包括系统的内存大小、应用的工作负载特性以及预期的响应时间等。下面是一些建议的设置,但请注意这些只是指导性的建议,实际的设置应根据您的具体情况进行调整。
相关参数说明
vm.dirty_ratio
:表示当系统使用的内存达到总内存的这个百分比时,内核将会强制把脏页写回到磁盘。默认值通常是 80% 或更高。vm.dirty_background_ratio
:当系统使用的内存达到总内存的这个百分比时,内核将会在后台开始异步地写脏页到磁盘。默认值通常是 10% 或更低。vm.dirty_time
:表示脏页写回的时间间隔,单位为毫秒。此参数在较新的内核版本中已被vm.dirty_expire_centisecs
替代。vm.dirty_expire_centisecs
:表示脏页过期时间,单位为百分之一秒。过了这个时间,即使没有达到vm.dirty_ratio
或vm.dirty_background_ratio
规定的比例,脏页也将被写回到磁盘。vm.dirty_writeback_centisecs
:表示后台脏页写回的周期,单位为百分之一秒。这个值越小,后台写回的频率越高。
建议的设置
对于高并发服务器,我们希望尽可能多地利用内存缓存来加速文件系统访问,并且尽量减少频繁的磁盘 I/O 操作。因此,可以考虑如下设置:
vm.dirty_ratio
:设置为 30% 到 50% 之间。这样可以保证大部分内存被用于缓存,只有在内存紧张时才会强制写回脏页。vm.dirty_background_ratio
:设置为 5% 到 10% 之间。这样可以在内存占用达到较低阈值时就开始异步写回,避免突然间大量的脏页写回操作。vm.dirty_expire_centisecs
:设置为 3000 到 5000 之间(30 到 50 秒),这样可以确保即使内存不紧张,脏页也会在一段时间后被写回磁盘,防止数据丢失。vm.dirty_writeback_centisecs
:设置为 500 到 1000 之间(5 到 10 秒),以保持适度的写回频率。
实际操作
- 临时修改:
使用sysctl -w
命令可以临时修改这些参数:
sysctl -w vm.dirty_ratio=30
sysctl -w vm.dirty_background_ratio=5
sysctl -w vm.dirty_expire_centisecs=3000
sysctl -w vm.dirty_writeback_centisecs=500
- 持久化修改:
若要使修改永久生效,请编辑/etc/sysctl.conf
文件并添加相应的行:
sudo nano /etc/sysctl.conf
添加以下内容:
vm.dirty_ratio = 30
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
然后运行 sysctl -p
使更改立即生效。
注意事项
- 测试任何新设置前,请确保备份重要数据,并在测试环境中验证设置的效果。
- 监控系统的性能,特别是在负载高峰期间,确保设置不会导致内存不足或其他性能问题。
- 如果系统内存较小,可能需要更保守地设置这些参数,以避免内存耗尽的情况发生。
这些设置需要根据实际情况进行调整,以达到最佳的性能和稳定性。