Redis 優化之THP 關閉透明大頁

THP


Redis在啓動時可能會看到如下日誌:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This
will create latency and memory usage issues with Redis. To fix this issue run
the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root,
and add it to your /etc/rc.local in order to retain the setting after a reboot.
Redis must be restarted after THP is disabled.

從提示看Redis建議修改Transparent Huge Pages(THP) 的相關配置,Linux kernel在2.6.38內核增加了THP特性, 支持大內存頁(2MB) 分配, 默認開啓。 當開啓時可以降低fork子進程的速度, 但fork操作之後, 每個內存頁從原來4KB變爲2MB, 會大幅增加重寫期間父進程內存消耗。 同時每次寫命令引起的複製內存頁單位放大了512倍, 會拖慢寫操作的執行時間, 導致
大量寫操作慢查詢, 例如簡單的incr命令也會出現在慢查詢中。 因此Redis日誌中建議將此特性進行禁用, 禁用方法如下:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

爲了使機器重啓後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位置寫死:

FILE *fp = fopen("/sys/kernel/mm/transparent_hugepage/enabled","r");
if (!fp) return 0;

所以在發行版中, 雖然沒有THP的日誌提示, 但是依然存在THP所帶來的問題:

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章