扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
客户端读写超时
山阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!客户端连接超时
客户端缓冲区异常
config set client-output-buffer-limit "normal 1048576 1048576 60 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
如果使用get 命令获取一个bigkey(例如3M) ,就会出现异常,因为默认位1M(1048576字节)
Lua脚本正在执行
如果redis 正在执行lua脚本,并且超过了lua-time-limit ,此时其它客户端调用redis 时,会收到redis busy running a script;
可以使用脚本杀死,script kill 或者 shutdown save
需要注意的是script kill 该命令在脚本执行过写操作是不会生效的,所以要么等待脚本执行结束或者是shutdown save 停掉redis服务,虽然redis脚本好用,但是需要谨慎使用。
redis正在加载持久化文件
如果redis正在加载持久化文件时,客户端调用redis ,就会报loading redis is loading the dataset in memory错误
redis使用的内存超过maxmemory配置
客户端在执行写操作时,如果redis 的使用内存大于maxmemory 的设置,会收到 oom used memory >maxmemory 错误;
此时应该调整maxmemory 的值并造成内存增长的原因。当然这也是因为redis的淘汰策略使用的是默认值:maxmemory-policy:noeviction
noeviction(默认策略):对于写请求不再提供服务,直接返回错误
临时解决方案:config set maxmemory-policy allkeys-lru 设置
客户端连接数过大
如果客户端连接数超过了maxlients ,新的客户端连接就会出现报错:err max number of clients reached
redis 默认值为10000 ,正常都是够用的,出现这种情况属于异常情况,原因很多,需要后续排查。
临时解决方案就是: 下线一些,应用程序中不重要的部分使用,使得连接数降下来 或者调整一下maxclients 值进行问题修复。但是还是得找出根源,不然过段时间又会出现问题。
客户端案例分析
例如:redis 内存陡增
客户端接收到 OOM 异常
分析如下:
第一:首先看是否存在主从复制出现问题,使用dbsize 查看key的对比大小
第二:其它原因导致主节点内存使用过大,排查是否由客户端缓冲区造成主节点内存陡增,使用 info clients 命令查询信息如下:
127.0.0.1:6379>info clients
# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:1689600
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
很明显输出缓存区不太正常,大的缓存区已经超过了168万多个对象了,这个时候需要通过client list 命令找到omem 不正常的连接,一般来说omem 为0 (因为速度足够快),执行如下代码可找出omem非零的客户端连接:
➜ ~ redis-cli client list | grep -v "omem=0"
找到如下一条命令:
id=5 addr=127.xxx.xx.1:55606 laddr=127.xx.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=16864 argv-mem=10 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=1689600 omem=1682131200 tot-mem=34042 events=r cmd=monitor
很明显是因为客户端在执行monitor 命令造成的
解决方案:
可以使用client kill 命令杀死这个连接
➜ ~ client kill 127.xxx.xx.1:55606
如何避免此类问题再次发生呢:
使用rename-command 命令重置monitor命令
限制输出缓存区的大小
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流