Redis 性能优化
一、Linux 操作系统
【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的] ,另外 redis 内部最多会使用 32 个文件描述符。
1 ulimit -n 10032 #但重启后就无效了,也可以通过配置文件limits.conf 的形式持久修改
2 #修改了,重新登录后就立刻生效.可以用CentOS ulimit -a 查看确认
3 [root@dev ~]# ulimit -a
4 #... 省略
5 open files (-n) 10032
2)、修改 TCP backlog:redis 默认的 tcp-backlog 为 511,可通过配置 tcp-backlog 进行调整,如果 Linux 的 tcp-backlog 小于 redis 的 tcp-backlog,日志里会出有 warning。此参数确定了 TCP 连接中已完成队列(完成三次握手之后)的长度, 当然此值必须小于或等于 Linux 系统定义的 [/proc/sys/net/core/somaxconn] 值,而 Linux 的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定
1 #建议修改为 2048 修改somaxconn
2 #该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。
3 echo 2048 > /proc/sys/net/core/somaxconn #但是这样系统重启后保存不了
4
5 #持久化设置: 在 /etc/sysctl.conf 中添加如下:
6 #net.core.somaxconn = 2048
7
8 #然后在终端中执行:sysctl -p
【2】vm.overcommit_mermory:表示内核在分配内存时做检查的方式。
1)、redis 建议将 vm.overcommit_memory 设置为1,防止极端情况下 fork 出错。
2)、vm.overcommit_memory 取值说明:Linux 对大多数申请内存的回复均为 YES,以运行更多程序,因为申请后并不是立马使用,该技术叫 vm.overcommit。
■ 0:内核将检查是否有足够的内存,如果足够,申请通过,否则内存申请失败把错误返回给应用进程。
■ 1:表示内核容许超量使用内存直到用完为止。
■ 2:内存绝不过量使用内存,既系统整个内存空间不能超过 swap+50% 的 RAM[(random access memory)即随机存储内存 ]值,50% 是 overcommit_ratio 的默认值,支持修改。
echo "vm.overcommit_memory=1" > /etc/sysctl.conf
【3】swappiness 参数:1):swappiness 参数决定操作系统使用 swap 的倾向程度,取值范围是0~100,swappiness 的值越大,说明操作系统可能使用 swap 的概率越高,swappiness 值越低,表示操作系统更加倾向于使用物理内存。
如果系统内存不足,可能会将 Redis 对应的某些页从内存 swap到磁盘文件上。可以通过 /proc 文件夹中的 smaps文件查看是否有数据页被 swap。如果发现大量页被 swap,则可以用 vmstat 和 iostat 进一步追查原因
2)、建议 Linux3.5 以上设置为1,否则建议设置为0。
echo "vm.swappiness=1" > /etc/sysctl.conf
【4】Transparent Huge Pages:支持大内存分页(2MB)分配,默认开启,redis 建议关闭此功能。
sudo chkconfig --add disable-transparent-hugepages
【5】OOM killer:会在可用内存不足时选择性杀掉用户进程,OOM killer 会为每个用户进程设置一个权重,权重越大被 kill 的可能性越大。每个进程的权重放在 [/proc/{progress_id}/oom_adj]。对于 Redis 服务器来说,可以将所有 Redis 的 oom_adj 设置为最低值或者稍小的值,降低被 OOM killer 杀掉的概率。应该设置与进程有关,无法一次性设置。
二、Redis 关键参数
【1】客户端最大连接数(maxclients):1)、现象:如果连接数不够,或者请求返回比较慢导致连接数不足,可能会报[ max number of clients reached ]。
2)、优化:调整 maxclients,或者优化 redis 命令处理性能。要注意该参数受到操作系统最大文件句柄的限制(ulimit -n <n>)
【2】repl-ping-slave-period/repl-timeout:1)、说明:slave 会每隔 repl-ping-slave-period(默认10秒)ping 一次 master,如果查过 repl-timeout(默认 60秒)都没有收到响应,就会认为 Master 挂掉。
2)、优化:如果 Master 明明没挂掉但被阻塞住了也会报这个错。可以适当调大 repl-timeout
【3】client-output-buffer-limit:1)说明:客户端输出缓冲区大小。
2)、当使用主从复制时,性能压测下,数据量会急剧增长,导致从节点需要复制的数据很大,消耗时长增加。slave 没挂但被阻塞住了,比如正在 loading Master 发过来的 RDB,Master 的指令不能立刻发送给 slave,就会放在 output-buffer 中,在配置文件中有如下配置:
client-output-buffer-limit slave 256mb 64mb 60
上述配置说明:负责发送给 slave的 client,如果 buffer 超过 256m 或者连续 60秒超过 64m,就会被立刻强行关闭。所以此时应该相应调大数值,否则就会出现很悲剧的循环:Master 传输一个很大的 RDB 给 slave,slave 努力地装载,但是还没装载完,Master 对 client 的缓存存满了,关闭后再来一次。
三、Redis 性能测试
Redis 官网自动 Redis 性能测试工具 Redis-benchmark,可以有效的测试 Redis 服务的性能。
【1】案例一:命令如下,100个并发连接,100000个请求,检测host为127.0.0.1 端口为 6379 的 redis 服务器性能
1 ./redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
2
3 #对集合写入测试 结果如下
4 100000 requests completed in 2.38 seconds #100000个请求在2.38秒内完成
5 20 parallel clients #每次请求有20个并发客户端
6 3 bytes payload #每次写入3个字节的数据
7 keep alive: 1 #保持一个连接,一台服务器来处理这些请求
8
9 93.06% <= 15 milliseconds
10 99.96% <= 31 milliseconds
11 99.98% <= 46 milliseconds
12 99.99% <= 62 milliseconds
13 100.00% <= 62 milliseconds
14 #所有请求在62毫秒内完成
15 42105.26 requests per second
16 #每秒处理42105.26次请求
【2】案例二:命令如下,测试指定操作命令的性能。
1 ./redis-benchmark -t set,lpush -n 100000 -q
四、查找慢查询语句
Redis 提供了记录耗时操作语句的功能,当语句执行(不包括命令排队时间)超过了阈值,则被认为是慢查询。
【1】参数设置:[ slowlog-log-slower-than ]:记录运行耗时语句的阈值,单位是微妙(1秒=1000毫秒=1000 000微妙,默认值:10000)。当值为0时,记录所有请求。当值<0时,不记录任何请求。
[ slowlog-max-len ]:该参数用于设置慢查询保存的条数。
【2】功能使用:[ slowlog get ]:用于查询慢查询信息。[ slowlog len ]:显示当前 redis 有多少条慢查询
Redis 性能优化的更多相关文章
- redis性能优化、内存分析及优化
redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...
- 《吐血整理》Redis 性能优化的 13 条军规!史上最全
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1) ...
- 吊打面试官系列:Redis 性能优化的 13 条军规大全
1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi ...
- redis性能优化——生产中实际遇到的问题排查总结
背景 redis-K,V数据库,因其高性能的操作性和支持丰富的数据结构,目前大量被用于衔接应用层和关系数据库中间的缓存层.随着使用的场景越来越多,和数据量快速的递增,在生产环境中经常会遇到相关的性能瓶 ...
- 大型系统的Redis性能优化
问题描述 系统背景:大型线上Java服务集群(活跃用户数上千万),业务重度使用Redis存储个管理Session,业务并发量>1WQPS,基本上每个请求都需要访问Redis(可能是多次),使用了 ...
- redis性能优化
redis日志截图:
- Redis性能优化之redis.cnf配置参数
redis调优总结 1.相应的参数调优 加内存2.redis使用结构调优3.使用合理的数据类型说明:redis存储的数据为redis hash(字符映射表) 单key多字段结构. 1)调整配置文件中配 ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘
15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...
- 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
随机推荐
- java中的数组遍历(简便小方法)
int[] a = {1,2,3,4}; for(int k:a){ System.out.println(k); //注意冒号后面直接写数组名即可. //注意,k的值就是数组a中某一项的值,即语句& ...
- UNIT TWO
声明 基于8086的寄存器共14个16位的,分别是 ax bx cx dx (通用寄存器) si di bp sp (基址与变址寄存器) cs ss ds es (段寄存 ...
- 2022-07-09 第一小组 张明旭 前端HTML学习记录
今天是正式学习的第一天,第一次接触前端内容,蒙了一圈又一圈,老师讲课速度是1000圈/s!!!!!!(插一句老师的打字和打代码速度起飞!) 好在有视频回放而且跟了笔记,能复习n遍.加油!!! 主要学习 ...
- Vue3 流程图组件库 Vue Flow 简单使用
官网 Vue Flow 官网 Vue Flow GitHub 安装 npm i --save @vue-flow/core yarn add @vue-flow/core pnpm i @vue-fl ...
- 【逆向】CVE-2017-8570漏洞分析调试技巧
前言 CVE-2017-8570是一个逻辑型漏洞,该漏洞利用复合Moniker绕过了CVE-2017-0199的更新补丁,可以在Office文档中执行任意SCT(Windows Script Comp ...
- jupyter nbconvert --to FORMAT xxx
$ jupyter nbconvert --to FORMAT notebook.ipynb This will convert the Jupyter notebook file notebook. ...
- Merge Overlapping Intervals
refer to: https://www.algoexpert.io/questions/Merge%20Overlapping%20Intervals Problem Statement Samp ...
- Vue系列---【自定义vue组件发布npm仓库】
自定义vue组件发布npm仓库 参考链接:自定义vue组件发布npm仓库
- python+基本3D显示
想要将双目照片合成立体图实现三维重建,完全没有头绪.但是对三维理解是必须的.所以将以前在单片机上运行的 3D画图 程序移植到python上.效果如下: 没有用numpy.openGL等,只用了纯mat ...
- manjaro安装后配置与美化
时间同步 sudo timedatectl set-ntp true 换源 sudo pacman-mirrors -i -c China -m rank 更新 更新系统 sudo pacman -S ...