THP
Redis在启动时可能会看到如下日志:
从提示看Redis建议修改Transparent Huge Pages(THP) 的相关配置,Linux kernel在2.6.38内核增加了THP特性, 支持大内存页(2MB) 分配, 默认开启。 当开启时可以降低fork子进程的速度, 但fork操作之后, 每个内存页从原来4KB变为2MB, 会大幅增加重写期间父进程内存消耗。 同时每次写命令引起的复制内存页单位放大了512倍, 会拖慢写操作的执行时间, 导致
大量写操作慢查询, 例如简单的incr命令也会出现在慢查询中。 因此Redis日志中建议将此特性进行禁用, 禁用方法如下:
为了使机器重启后THP配置依然生效, 可以在/etc/rc.local中追加echo never>/sys/kernel/mm/transparent_hugepage/enabled。
在设置THP配置时需要注意: 有些Linux的发行版本没有将THP放到/sys/kernel/mm/transparent_hugepage/enabled中, 例如Red Hat6以上的THP配置放到/sys/kernel/mm/redhat_transparent_hugepage/enabled中。 而Redis源码中检查THP时, 把THP位置写死:
所以在发行版中, 虽然没有THP的日志提示, 但是依然存在THP所带来的问题: