Login
网站首页 > 文章中心 > 其它

Redis阻塞原因_redis阻塞队列

作者:小编 更新时间:2023-08-06 10:50:30 浏览量:184人看过

自身因素

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]# 


Redis阻塞原因_redis阻塞队列-图1

写入数据,执行大对象查询命令,发现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序列化后的长度

Redis阻塞原因_redis阻塞队列-图2

生产环境执行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   

?

2.持久化造成阻塞

? 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阻塞原因相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章