Redis 性能优化_redis ulimit-程序员宅基地

技术标签: 性能优化  linux  分布式缓存【Redis】  redis  

更多内容,请到个人博客

一、Linux 操作系统


【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的] ,另外 redis 内部最多会使用 32 个文件描述符。

ulimit -n 10032  #但重启后就无效了,也可以通过配置文件limits.conf 的形式持久修改
#修改了,重新登录后就立刻生效.可以用CentOS ulimit -a 查看确认
[root@dev ~]# ulimit -a
#... 省略
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。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定

#建议修改为 2048 修改somaxconn
#该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。
echo 2048 > /proc/sys/net/core/somaxconn #但是这样系统重启后保存不了

#持久化设置: 在 /etc/sysctl.conf 中添加如下:
#net.core.somaxconn = 2048

#然后在终端中执行: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 )

【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 -h 执行服务器主机 127.0.0.1
2 -P 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发连接数 50
5 -n 指定请求数 10000
6 -d 以字节的形式指定SET/GET值的数据大小 2
7 -k 1=keep alive 0=reconnect 1
8 -r SET/GET/INCR 使用随机 key, SADD使用随机值
9 -P 通过管道传输<numreq>请求 1
10 -q 强制退出 redis,仅显示 query/sec值
11 –csv 以 CSV 格式输出
12 -l 生成循环,永久执行测试
13 -t 仅运行以逗号分隔的测试命令列表

【1】案例一:命令如下,100个并发连接,100000个请求,检测host为127.0.0.1 端口为 6379 的 redis 服务器性能

./redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

#对集合写入测试 结果如下
100000 requests completed in 2.38 seconds #100000个请求在2.38秒内完成
20 parallel clients  #每次请求有20个并发客户端
3 bytes payload  #每次写入3个字节的数据
keep alive: 1  #保持一个连接,一台服务器来处理这些请求

93.06% <= 15 milliseconds
99.96% <= 31 milliseconds
99.98% <= 46 milliseconds
99.99% <= 62 milliseconds
100.00% <= 62 milliseconds
#所有请求在62毫秒内完成
42105.26 requests per second
#每秒处理42105.26次请求

【2】案例二:命令如下,测试指定操作命令的性能。

./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 有多少条慢查询

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhengzhaoyang122/article/details/112293953

智能推荐

基于 OpenCV 的图像处理与分析应用的设计与实现_具有图像分析设计开发-程序员宅基地

文章浏览阅读1.8k次。图像处理与分析是计算机视觉中的重要应用领域,通过对图像进行处理和分析,可以提取有用的信息和特征,用于解决实际问题。 OpenCV 是一个强大的开源计算机视觉库,提供了丰富的功能和算法,适用于各种图像处理和分析任务。本文将以设计和实现一个基于 OpenCV 的图像处理与分析应用为中心,为你介绍构建这样一个应用的基本原理、方法和实例。_具有图像分析设计开发

ASR6501模组Cortex-M0+ SX1262 PSoC+LoRaWAN节点模块 CubeCell系列AT指令中文手册_sx1262中文手册-程序员宅基地

文章浏览阅读2.2k次。CubeCell系列AT指令中文手册0.版权声明1.摘要2.串口设置3. AT指令语法3.1语法概述3.2 AT指令集基础控制指令(括号中为译者注释,并不会显示)用户AT指令用户AT指令执行逻辑“ 普通LoRa模式”专有指令设置LoRa监听/发送参数接收模式接收数据输出模式选择LoRaWAN模式专有指令设置 DevEui设置 AppEui设置AppKey设置NwkSKey设置 AppSKey设置 DevAddr设置 OTAA / ABP mode配置ADR配置LoRaWAN通道掩码触发OTAA访问设置通讯周_sx1262中文手册

C++语法基础-程序员宅基地

文章浏览阅读122次。两种方法 一种是宏定义 一种是const修饰c++风格字符串跟定义变量是一样的 前提是要加上一个头文件#include。

基于springboot2.1.7的springcloud(简单应用)eureka+Feign远程调用服务_org.springframework.boot2.7.17该使用那个版本的feign-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏3次。基于springboot2.1.7的springcloud前言搭建一个父maven项目搭建Eureka注册中心搭建提供者搭建消费者前言不同的springboot对应的springcloud版本可能不一样,就拿springboot2.1.7或者2.1.8来说,它对应的springcloud版本是Greenwich.SR3。这些对应的版本信息都是从官方文档中所得知,所以要养成翻阅官方文档的好习惯。..._org.springframework.boot2.7.17该使用那个版本的feign

【转】加权最小二乘法_带权函数的最小二乘法-程序员宅基地

文章浏览阅读4.9k次,点赞4次,收藏44次。加权最小二乘、迭代最小二乘、抗差最小二乘、稳健最小二乘他们细节的区别我就不过分研究了,不过这些最小二乘似乎表达的是一个意思:构造权重函数,给不同测量值不同的权重,偏差大的值权重小,偏差小的权重大,采用迭代最小二乘的方式最优化目标函数。下面是matlab中robustfit函数权重函数,可以参考一下:..._带权函数的最小二乘法

openstack keystone 添加工程以及用户_openstack将用户加入到用户组-程序员宅基地

文章浏览阅读2.3k次。keystone用户管理可以通过rest api进行,也可以通过相关的命令行进行。python-keystone是keystone认证组件的一个客户端,提供了两种使用方式,(1)python编程接口 (2)命令行接口# Using token auth env variablesexport SERVICE_ENDPOINT=http://127.0.0.1:3535_openstack将用户加入到用户组

随便推点

c++编写暴力破解密码_怎么用c++破译administrator密码-程序员宅基地

文章浏览阅读760次。打开控制台:windows+R,进入目录路径。三、将两个程序复制到一个文件夹中。_怎么用c++破译administrator密码

社会网络分析能干什么?_社会网络分析用来做什么-程序员宅基地

文章浏览阅读8.5k次,点赞3次,收藏11次。现在来看,社会网络分析可以解决或可以尝试解决下列问题:1-人际传播问题,发现舆论领袖,创新扩散过程;2-小世界理论,六度空间分割理论;3-Web分析,数据挖掘中的关联分析,形成交叉销售,增量销售,也就是啤酒和尿布的故事;4-社会资本,产业链与价值链;5-文本的意义输出,通过追问调查研究文本的关联和意义;6-竞争情报分析;7-语言的关联,符号意_社会网络分析用来做什么

开源软件的总拥有成本指南_使用开源软件需要履行哪些义务-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏5次。使用现成的软件能加速开发进程。然而开源软件(OSS)并不是免费使用的。使用开源软件往往伴随着承担义务和风险,这些都是成本。本指南根据公开信息和我15年的经验总结了使用开源软件进行专业软件开发的成本。_使用开源软件需要履行哪些义务

ROS2 Warning: RosPluginProvider._parse_plugin_xml() plugin file rqt_gui_cpp/plugin.xml not found-程序员宅基地

文章浏览阅读1k次。ROS2运行rqt指令,出现一个警告,RosPluginProvider._parse_plugin_xml() plugin file "C:\dev\ros2_galactic\share\rqt_gui_cpp/plugin.xml" in package "rqt_gui_cpp" not found原因,RosPluginProvider._parse_plugin_xml() plugin 在windows系统上不受支持。参考,https://github.com/ros-v_rospluginprovider._parse_plugin_xml() plugin file "/opt/ros/kinetic/share/rq

精品单页个人导航HTML源码_单页导航源码-程序员宅基地

文章浏览阅读1k次。简约大气精品单页导航-可自行修改其他页面,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面。_单页导航源码

Axure RP医疗在线挂号问诊原型图医院APP原形模板_医疗app原型-程序员宅基地

文章浏览阅读1.1k次。本套原型图主要功能有医疗常识科普、医院挂号、排队预约、在线问诊、医院查找等,基本所有模块都是原创设计。同时页面中使用了大量的动态面板效果,制作了仿真的预约弹窗、医院详情介绍等。你可以将页面直接套用在类似项目上,或直接在模板上拓展页面,快速搭建出高质量的医疗类APP。医疗在线挂号问诊Axure RP原型图医院APP原形模板,是一款原创的医疗类APP,设计尺寸采用iPhone13(375*812px),原型图上加入了仿真手机壳,使得预览效果更加逼真。_医疗app原型

推荐文章

热门文章

相关标签