Redis运维优化

一、关闭THP

1.什么是THP,它是用来做什么的?

答:

2.Redis服务为什么要关闭THP?

答:
开启THP后,当Redis做持久化操作时,会降低fork子进程的速度,在操作之后,每个内存页从原来4KB变为2MB,会大幅增加重写期间父进程内存消耗。
同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。

3. 如何关闭THP?

答:

cd /sys/kernel/mm
cd transparent_hugepage

cat enabled 
默认开启时,中括号会将always包围起来。
[always] madvise never

手动禁用时:
echo never > enabled
echo never > defrag

在启动项/etc/rc.local 中添加shell脚本

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

4.注意事项

上述路径是CentOS7系统里的位置,在RedHat6以上的系统里,位置是下面这个,注意路径区别。

/sys/kernel/mm/redhat_transparent_hugepage/enabled

二、优化Redis

1、内存分配控制 vm.overcommit_memory

什么是overcommit?
答:Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多的程序。因为申请内存后,并不会马上使用内存,这种技术叫做overcommit

在文件中设置
vi /etc/sysctl.conf
vm.overcommit_memory =  0|1|2

0:内核将检查系统中是否有足够的可用内存,如果有,内存申请通过,否则失败。返回错误给应用。
1: 内核允许超量使用内存直到用完为止。
2: 表示决不过量的使用内存。

这块常用配置项值为1,主要用于Redis持久化时fork操作。

Redis建议把这个值设置为1,是为了让fork操作能够在低内存下也执行
成功。
如果fork失败,日志里将记录

Cannot allocate memory

2、关于swap分区优化

Redis性能调优的一个重要部分,就是防止Redis在内存里的数据发生swap交换。所谓的swap分区,就是在硬盘里划出一块空间,做为临时备用空间。
当内存空间不足时,会通过算法,将一部分数据放到swap分区中存储。因为硬盘的速度是远远慢于内存的,一但发现数据交换到swap分区,将会严重影响Redis性能。

长见的优化办法:

1. 增加服务器可用物理内存
2. 设置maxmemory 选项,规定Redis最大可以内存数
3. 在/etc/sysctl.conf中修改 swappiness,降底swap分区的使用概率。

关于第3条的操作,现在记录一下。

vi /etc/sysctl.conf

vm.swappiness=60(默认值) ,可以改写为10

如果值等于100 ,将主动使用swap
如果值等于0,宁愿用OOM Killer也不会用swap(Linux 3.5版本以上)

3、OOM Killer

当linux系统可用内存不足时会选择性地杀掉用户进程。
OOM Killer 杀进程的规则:
OOM killer会为每个用户进程设置一个权值,当权值越高时,被kill掉的概率就越高,反之概率越低。

每个进程的权重值存在于proc目录下的oom_score文件中

可以通过ps aux|grep redis 查到redis服务器的进程ID

然后根据进程ID,进入相应目录,找到oom_score文件
cat /proc/进程ID/oom_score 

如果人为修改权重,需要操作上述目录下的oom_adj文件,可以改一个比较小的值。

4、系统时钟NTP

NTP(Network Time Protocol) 网络时间协议,保障不同服务器拥有一致的时间。
当使用Redis哨兵或Cluster时,使用了多个节点。

如果各服务器系统时间不一样,记录到日志里的时间点也不一样。 当排查日志时,会很不方便。所以要给每个服务器,设置NTP

添加计划任务,字段有5个,分别代表: 分,小时,日期,月,周

每10分钟,同步一次NTP服务
*/10 * * * * /usr/sbin/ntpdate ntp.xx.com > /dev/null 2>&1

5、进程可打开的最大文件数设置

答:
在Linux操作系统中,将文件句柄,文件描述符,都当作文件来看待。Linux系统对TCP连接也定义为一个文件句柄。

并且对进程可打开的最大文件数量是有限制的。可以通过ulimit -n查看,通常默认1024.

因此对于支撑大量连接的Redis来说需要增大这个值,如设置ulimit -n 65535,防止出现Too many open files错误。

永久修改:
在/etc/security/limits.conf最后增加如下两行记录,下面的两条命令,表示任何人可以打开的最大文件数,其中 soft 代表警告值,hard 设置的大小被超过,就会进行真正的报错。

* soft nofile 65535
* hard nofile 65535

注:
ulimit -a 可以查看当前系统的所有限制值,
ulimit -n 可以查看当前的最大打开文件数。

6、TCP backlog设置

Linux操作系统对于特定端口的TCP连接使用backlog队列保存。
Redis 默认文件里

tcp-backlog=511

如果Redis用于高并发场景,为了防止缓慢连接占用,可适当增大这个设置.比如增加到2048

但是要注意一点,backlog的大小,是以Linux系统设置为主的。还需要进入系统文件设置

vi /etc/sysctl.conf
net.core.somaxconn= 511

wq!保存退出
sysctl -p  让配置生效 

如果系统里的net.core.somaxconn 小于redis.conf tcp-backlog的配置大小
Redis会打印如下警告日志:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

操作内核参数默认值一般是128(定义了系统中每一个端口最大的监听队列的长度),对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。

当Redis客户端连接出现拒绝访问时,怀疑是backlog队列溢出导致的问题,可以通过

netstat -s | grep overflowed

统计backlog队列溢出造成的连接拒绝次数。

三、关于配置bind

配置文件里的bind选项 后面填写的IP,是指Redis和哪个网卡进行绑定。

如果只配置192.168.10.1,就只能使用这块网卡进行连接,本机127.0.0.1 都不行

redis-cli -h 192.168.10.1

bind后面可以接受多项配置

bind 192.168.10.1  127.0.0.1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容