一、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 性能优化的更多相关文章

  1. redis性能优化、内存分析及优化

    redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...

  2. 《吐血整理》Redis 性能优化的 13 条军规!史上最全

    Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1) ...

  3. 吊打面试官系列:Redis 性能优化的 13 条军规大全

    1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi ...

  4. redis性能优化——生产中实际遇到的问题排查总结

    背景 redis-K,V数据库,因其高性能的操作性和支持丰富的数据结构,目前大量被用于衔接应用层和关系数据库中间的缓存层.随着使用的场景越来越多,和数据量快速的递增,在生产环境中经常会遇到相关的性能瓶 ...

  5. 大型系统的Redis性能优化

    问题描述 系统背景:大型线上Java服务集群(活跃用户数上千万),业务重度使用Redis存储个管理Session,业务并发量>1WQPS,基本上每个请求都需要访问Redis(可能是多次),使用了 ...

  6. redis性能优化

    redis日志截图:

  7. Redis性能优化之redis.cnf配置参数

    redis调优总结 1.相应的参数调优 加内存2.redis使用结构调优3.使用合理的数据类型说明:redis存储的数据为redis hash(字符映射表) 单key多字段结构. 1)调整配置文件中配 ...

  8. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  9. java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘

    15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...

  10. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

随机推荐

  1. java中的数组遍历(简便小方法)

    int[] a = {1,2,3,4}; for(int k:a){ System.out.println(k); //注意冒号后面直接写数组名即可. //注意,k的值就是数组a中某一项的值,即语句& ...

  2. UNIT TWO

    声明 基于8086的寄存器共14个16位的,分别是 ax  bx  cx  dx  (通用寄存器) si  di  bp  sp    (基址与变址寄存器) cs  ss  ds  es   (段寄存 ...

  3. 2022-07-09 第一小组 张明旭 前端HTML学习记录

    今天是正式学习的第一天,第一次接触前端内容,蒙了一圈又一圈,老师讲课速度是1000圈/s!!!!!!(插一句老师的打字和打代码速度起飞!) 好在有视频回放而且跟了笔记,能复习n遍.加油!!! 主要学习 ...

  4. Vue3 流程图组件库 Vue Flow 简单使用

    官网 Vue Flow 官网 Vue Flow GitHub 安装 npm i --save @vue-flow/core yarn add @vue-flow/core pnpm i @vue-fl ...

  5. 【逆向】CVE-2017-8570漏洞分析调试技巧

    前言 CVE-2017-8570是一个逻辑型漏洞,该漏洞利用复合Moniker绕过了CVE-2017-0199的更新补丁,可以在Office文档中执行任意SCT(Windows Script Comp ...

  6. jupyter nbconvert --to FORMAT xxx

    $ jupyter nbconvert --to FORMAT notebook.ipynb This will convert the Jupyter notebook file notebook. ...

  7. Merge Overlapping Intervals

    refer to: https://www.algoexpert.io/questions/Merge%20Overlapping%20Intervals Problem Statement Samp ...

  8. Vue系列---【自定义vue组件发布npm仓库】

    自定义vue组件发布npm仓库 参考链接:自定义vue组件发布npm仓库

  9. python+基本3D显示

    想要将双目照片合成立体图实现三维重建,完全没有头绪.但是对三维理解是必须的.所以将以前在单片机上运行的 3D画图 程序移植到python上.效果如下: 没有用numpy.openGL等,只用了纯mat ...

  10. manjaro安装后配置与美化

    时间同步 sudo timedatectl set-ntp true 换源 sudo pacman-mirrors -i -c China -m rank 更新 更新系统 sudo pacman -S ...