记一次 redis 调错经验 java.util.NoSuchElementException: Unable to validate object

[size=large]
运行正常的redis集群,在今早爆出 连串错误。
先是 拒绝连接:
排查过程:
范围猜测
1 怀疑服务器断电重启导致端口被防火墙校验
2 端口被其他进程占用
3 内存不足
4 IP段切换造成

过程:
关闭防火墙 检查redis读写是否能够正常访问 正常
netstat 检查端口占用 无占用
查看内存 因为使用的redis是3.2.9 版本,鉴于redis copy-on-write特性,内存应该占用不大
IP 分段测试,多台服务器检测。

一轮排查下来 范围大致圈定在redis服务器本身。

续查:给指定的问题redis 指定日志 具体配置redis.conf

loglevel notice
logfile /opt/server/redis-3.2.9/redis.log


注意要把不相干的日志配置注释 以免干扰,发现无异常。怀疑是redis.conf bind参数问题,因为后期有新机器接入 IP段混乱。 为避免干扰 直接注释掉此参数。

现在允许访问。

但是后续问题继续出现,允许访问一段时间(几分钟)之后,停止对外服务,报错为 java.util.NoSuchElementException: Unable to validate object

随即排除用户名密码问题和redis服务本身问题。
继续观察日志 发现在停止访问的过程中 不断有进程尝试对内存数据进行持久化。日志提示open file有限制
怀疑:
1 连接超时
2 文件句柄太小
3 文件写入异常

过程:
增加 timeout 时间,进行调试,
增加ulimit -n 限制 进行测试 此时报错改为 RDB文件写入有问题。
随即修改rdb持久化文件配置

dir /tmp/redis_data
#./->/tmp/redis_data
dbfilename temp.rdb
#

操作指令:


sudo mkdir /tmp/redis_data
sudo touch temp.rdb

进行测试 发现日志提示 不允许自己创建temp.rdb文件,随即删除该文件
测试 ,报错修改为 写入文件权限不足,随即修改文件路径权限。
测试 正常,一段时间后 仍然正常写入。
问题解决。



[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值