??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
redis阻塞分析

转载   春秋小记   2018-10-21   浏览量:29


         redis是经典的单线程架构,所有的读写操作都是在一个主线程中完成的。当redis处于高并发情况时,如果出现阻塞,哪怕是很短的时间,对于应用来说都相当严重,会出现大量的超时问题,应用出问题。

1.  redis的阻塞主要包括两方面:

   1.1 内在原因:不合理使用API或数据结构、CPU饱和持久化阻塞

   1.2 外在原因:CPU竞争、内存交换、网络问题


     1.1内在原因:

          1.1.1:如何发现慢查询:slowlog get [N]  选型:N,可选,代表获取的日志条数

          1.1.2:如何发现大对象:redis-cli -h {ip} -p {port} --bigkeys

          1.1.3:CPU饱和问题:单线程Redis 处理命令时只能使用一个CPU,而CPU饱和是指Redis把单核CPU使用率跑到接近100%。CPU饱和导致Redis无法处理更多命令,严重影响吞吐和应用方的稳定。

     如何发现CPU饱和:redis-cli -h {ip} -p {port} --stat

          1.1.4:持久化相关阻塞:

                 a.fork阻塞: fork操作本身耗时过长,会导致主线程阻塞。
          通过info stats中的latest_fork_usec指标确定(单位为微秒),表示最近一次fork操作耗时,如果耗时很大,比如超过1秒,则需要做优化调整,比如不使用过大内存实例,或者规避fork缓慢的xen虚拟机。

                b.AOF刷盘阻塞:当我们开启AOF持久化功能时,文件刷盘的方式一般采用每秒一次,后台线程每秒对AOF文件做fsync操作。当硬盘压力过大时,fsync操作需要等待,直到写入完成。如果主线程发现距离上一次的fsync成功超过2秒,为了数据安全性它会阻塞直到后台线程执行fsync操作完成。这种阻塞行为主要是硬盘压力引起。后台日志会出现如下信息:

Asynchronous AOF fsync is taking too long (disk is busy). Writing the AOFbuffer without waiting for fsync to complete, this may slow down Redis.

     1.2 外在原因:

          1.2.1:CPU竞争:redis是经典的CPU密集型应用,不建议和其它的程序一起使用??梢允褂胻op命令都为问题;

          1.2.2:绑定CPU:优化把Redis绑定到CPU上,降低CPU频繁上下文切换。

                   注意:对于开启了持久化或参与复制的主节点不建议绑定CPU,防止父进程与子进程将产生激烈CPU竞争,影响Redis稳定性。

          1.2.3:内存交行:定位内存交换方法:

                   a.查询redis进程号:redis-cli -p 6384 info server |grep process_id

                   b.根据进程号查询内存交换信息:cat /proc/xxxx/smaps |grep Swap

                   c.如果交换都是0kb或者偶尔4kb属于正常现象

                   d. 降低系统使用swap优先级: 修改swappiness

          1.2.4:网络问题:

                   a. Redis连接拒绝:Redis通过maxclients参数控制客户端最大连接数,默认10000。查看info stats的rejected_connections统计指标展示被拒绝的数量??突Ф朔梦示×坎捎贸ち踊蛘吡映胤?nbsp;   式。进程限制优化:设置ulimit -n 65535 防止 Too many Open files
                   b.backlog队列溢出:系统默认backlog为128,优化:使用echo 512>/proc/sys/net/core/somaxconn修改系统默认参数,如果怀疑是backlog队列溢出,队列溢出统计:

                      netstat-s|grepoverflowed,查看是否有持续增长的连接拒绝情况。

                   c.网络延时:网络延时统计:
                                   redis-cli -h {host} -p {port} --latency
                                  分别统计:最小值、最大值、平均值、采样次数
                                  网络延时一般发生在跨机房部署
                   d.网卡软中断:单个网卡队列只能使用一个CPU,高并发下网卡数据集中在一个CPU下,导致无法利用多核CPU。网卡软中断瓶颈一般出现在网络高流量吞吐场景,top的si指标过高。

                      使用top 命令,按下1进行排查。

                  

          

                    

       



转载自://blog.51cto.com/1937519/2307058

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



linux系统清除redis的key与数据方法
linux系统清除redis的key与数据方法。
redis.conf配置选项列举说明
redisconf配置选项列举说明。注:REDISCLUSTER之后的配置暂时没有列出来。实在是太多了。
redis 从库数据同步失败——爬坑记
早上上班,发现redis的一个slave节点down了一个。对,没错,不是数据不同步那么简单,连redis服务进程都自动退出了。场景:主从同步模式master-->slave1master-->slave2master-->slave3info状态:slave1,slave2都是state=online,offset=5744884846,lag=1正常状态,slave3是sta
java47: redis
javaredis
redis+spring
redis.properties#redis连接池配置参数redis.pool.maxTotal=200redis.pool.maxIdle=50redis.pool.minIdle=10redis.pool.testOnBorrow=trueredis.pool.testOnReturn=trueredis.pool.fairness=falseredis.pool.maxWaitMillis=
redis相关(搭建和数据落盘)
redis的单实例、主从搭建和数据持久化
基于Redis的MessageQueue队列封装
Redis的链表List可以用来做链表,高并发的特性非常适合做分布式的并行消息传递。左进右出$redis->lPush($key,$value);$redis->rPop($key);以下程序已在生产环境中正式使用?;赗edis的PHP消息队列封装
Redis常用命令-服务器相关命令
Auth验证密码是否正确如:auth“password”ping测试连接是否存活echo在命令行打印一些内容select选择数据库。Redis数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取。quit退出连接。dbsize返回当前数据库中key的数目。info获取服务器的信息和统计。monitor实时转储收到的请求。configget获取服务器配置信息。如:configgetdir
Redis常用命令-键值相关命令
keys返回满足给定pattern的所有key如:keys*exists确认一个key是否存在如:existsnamedel删除一个keyexpire设置一个key的过期时间(单位:秒)如:expireaddr10move将当前数据库中的key转移到其它数据库中如:moveage1persist移除给定key的过期时间randomkey随机返回key空间的一个keyrename重命名keytype
redis之sorted sets类型及操作
sortedsets类型及操作sortedset是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序??梢岳斫馕辛搅械膍ysql表,一列存value,一列存顺序。操作中key理解为zset的名字。和set一样sortedset也是string类型元素的集合,不同的是每个元素都会关联一个double类型的