一、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. 使用端口排查解决启动Tomcat端口被占问题

    有时候在eclipse中启动Tomcat或启动纯净版的Tomcat会出现端口被占的问题,下面菜鸟小编带大家进行端口排查解决问题.(下面假设是我的80端口被占了,如果你不知道你的Tomcat端口是多少就 ...

  2. 项目启用eslint 检测工具

    在日常开发中,一个大点的项目会有多人参与,那么可能就会出现大家的代码风格不一,各显神通,这个时候就要祭出我们的eslint. 在这之前磨刀不误砍柴工,我们先来配置一下我们的代码编辑工具,如何在vsco ...

  3. UNIT THREE

    基础 (1) 内存以字节为单位,划分为若干个单元.(2) 计算机内数据存-取单位: ① 字节 (8bit) ② 字 (16bit) ③ 双字 (32bit) ④ 四字 (64bit) ds寄存器 DS ...

  4. libevent学习之入门--[02]从hello-world开始

    系列文章回顾 libevent学习之入门--[01]概述与安装 上一节介绍了libevent的下载和编译,从这节开始,我会从我学习的角度逐步探索libevent的源码,慢慢揭开它的神秘面纱. 面对几十 ...

  5. 系统U盘安装Windows无法打开install.wim的问题

    我们在使用UltraISO工具制作Windows操作系统安装U盘,使用U盘启动,在安装Windows操作系统的过程中,出现类似"Windows无法打开所需的文件X:\sources\inst ...

  6. C#中的范围类型(Range Type)

    //语法糖Rangestatic void Main(string[] args) { var myArray = new string[] { "Item1", "It ...

  7. verilog 硬件描述语言

    第一章 绪论 verilog--数字电路设计技术--ASIC/SOC芯片设计--协议pcie SATA USB--系统知识(个人计算机,芯片组,网络连接,嵌入式系统,硬件和软件的互操作) 第二章 寄存 ...

  8. 第17章 使用日志记录监视和排除错误(ASP.NET Core in Action, 2nd Edition)

    第3部分 扩展应用程序 我们在第1部分和第2部分中介绍了大量内容:我们查看了您将用于构建传统服务器渲染的 Razor Pages 应用程序以及 Web API 的所有主要功能组件.在第3部分中,我们将 ...

  9. .Net 开发 web.config参数获取

    System.Configuration.ConfigurationSettings.AppSettings["title"] 对应着 web.config下面的 <conf ...

  10. 网络游戏同步法则 -- skywind

    转载出处:http://www.skywind.me/blog/archives/112 网路的硬件也有限,而人的创造也无限,在公网平均130ms的Latency下,是不存在"完全的&quo ...