您好,欢迎来到豪特汽车网。
搜索
您的当前位置:首页Linux下Redis内存优化

Linux下Redis内存优化

来源:豪特汽车网


好吧,Redis要大家假装还有空余内存…也就是说会有很大的几率触发Swap造成性能急剧下降,不过,性能下降总比不能用好。

说到swap,大家肯定给Redis服务器设定过swappiness=0,然后祈祷奇迹的发生,但是还是触发了swap。
为什么呢?

首先,Linux十分注重读写性能,尽量避免磁盘IO,你从磁盘上读取的文件会被放入内存,就算程序结束了,还是存在的,这部分内存被称为file buffer(或者file page),是swap重点照顾的回收对象。
其次,Linux上的用户态进程所有页(也就是redis运行时占用的)也是可以回收的。

其实,swap的触发机制是这样的:

根据swap倾向(swap_tendency)决定回收用户态页还是file buffer,最后把LRU队列中用得最少的放入swap空间中。

摘自LWN
以下是内核计算其 “swap倾向”的公式:

swap_tendency = mapped_ratio/2 + distress + vm_swappiness

其中:

  • distress 值是内核在释放内存时遇到的问题数。当内核第一次决定收回内存页面时, distress将为0;尝试次数越多,这个值也越大。
  • mapped_ratio值是mapped page与总page比例,即
    mapped ratio = (nr mapped * 100) / total memory

    nr_mapped可以从下面的命令行获得

    grep nr_mapped /proc/vmstat
  • vm_swappiness 就是大家设定的swappniness值
  • 当swap_tendency超过100时,swap就开始收集最近较少用的页。
    而且swappiness设置为0,PRFA就不会回收用户态页,
    设置为100时,总是回收用户态页,当然这不是我们想看到的。

    最后回到之前的问题,怎么避免触发swap?
    其实调整好swapiness之后,只需要监测/proc/zoneinfo中的pages free/high 之间的差值即可,high是当前zone中计算出来的高水位值,当pages free低于pages high才会触发swap回收页,就是这么简单啦~

    实在担心的话可以用

    redis-server --test-memory 需要测试的内存(MB)

    测试一下,系统就会在给定的内存下跑测试。

    Copyright © 2019- howto234.cn 版权所有

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务