api或数据结构使用不合理:例如对一个上万元素的hash结构执行hgetall操作,数据量造成堵塞.?
慢查询
大对象
12⑦0.0.1:6379> flushall OK 12⑦0.0.1:6379> [root@localhost etc]# redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec # per 100 SCAN commands (not usually needed). -------- summary ------- Sampled 0 keys in the keyspace! Total key length in bytes is 0 (avg len 0.00) 0 strings with 0 bytes (00.00% of keys, avg size 0.00) 0 lists with 0 items (00.00% of keys, avg size 0.00) 0 sets with 0 members (00.00% of keys, avg size 0.00) 0 hashs with 0 fields (00.00% of keys, avg size 0.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00) [root@localhost etc]#
写入数据,执行大对象查询命令,发现String类型name为当前最大对象,确定了大对象,这样我们可以对它进行调整或缩减,分成多个小对象
[root@localhost etc]# redis-cli 12⑦0.0.1:6379> set name itxds OK 12⑦0.0.1:6379> exit [root@localhost etc]# redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec # per 100 SCAN commands (not usually needed). [00.00%] Biggest string found so far 'name' with 5 bytes -------- summary ------- Sampled 1 keys in the keyspace! Total key length in bytes is 4 (avg len ④00) Biggest string found 'name' has 5 bytes 1 strings with 5 bytes (100.00% of keys, avg size ⑤00) 0 lists with 0 items (00.00% of keys, avg size 0.00) 0 sets with 0 members (00.00% of keys, avg size 0.00) 0 hashs with 0 fields (00.00% of keys, avg size 0.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00)
b.生产环境查看key对应value序列化后的长度
生产环境执行debug object key 查看key对应value序列化后的长度,或strlen key查看key的字节数
c.info commandstats 命令分析命令不合理的开销时间,返回最近执行命令的调用次数,耗时信息
[root@localhost etc]# redis-cli --stat ------- data ------ --------------------- load -------------------- - child - keys mem clients blocked requests connections 1 80⑧23K 1 0 140 (+0) 10 1 80⑧23K 1 0 141 (+1) 10 1 80⑧23K 1 0 142 (+1) 10 1 80⑧23K 1 0 143 (+1) 10 1 80⑧23K 1 0 144 (+1) 10
? a.fork阻塞:fork操作做法神挂在RDB和AOF重写,redis主线程调用fork操作产生共享内存的子进程,柚子进程完成持久化操作,如果fork操作本身耗时过长,将导致主进程阻塞,可以执行info stats命令获取到latest_fork_usec指标,表示最近一次fork操作的耗时,若操作1s则需优化.
亦可查看info persistence统计中的aof_delayed_fsync指标,每次发生aof刷盘阻塞主线程时会累加.
A.CPU竞争
a.进程竞争:当redis与其他cpu密集型服务部署在一起时可能发生
b.绑定cpu:由于redis单线程架构,为充分利用多核cpu,一台机器部署多个redis并将redis进程绑定到cpu(可降低cpu上下文切换开销),当redis父进程fork操作创建子进程进行rdb/aof重写(很耗cpu) 时,父子进程共享同一cpu,将影响redis的稳定性
B.内存交换:指操作系统把redis使用的部分内存换出到硬盘,导致交换后redis性能急剧下降(内存与硬盘处理速度不在一个数量级),可如下查看内存交换信息获取redis进程号→cat /proc/进程号/smaps | grep Swap
C.网络问题:
①.)连接拒绝:
a).网络闪段:网络割接或者带宽耗尽
原因1:进程限制 操作系统会对进程使用的资源做限制,其中之一便是对可打开最大文件数进行控制,ulimit –n可查看,超过则发送too many open files错误
网卡软中断是指由于单个网卡队列只能使用一个CPU,高并发下网卡数据交互都集中在同一个CPU,导致无法充分利用多核CPU的情况,网卡软中断瓶颈一般出现在网络高流量吞吐的场景
以上就是土嘎嘎小编为大家整理的Redis阻塞原因相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!