jedis参数不当引发的问题总结
jedis参数不当引发dubbo服务线程池耗尽异常
现象:一个dubbo服务偶发性的出现个别机器甚至整个集群大量报线程池耗尽的问题。一开始对问题的处理比较粗暴,直接增加了10倍的线程数。但是问题依然偶尔出现,重启服务就可以暂时解决。后来,发现问题出现频率有点高,不得不花点时间认真分析了。
实际原因:jedis参数设置不当。实际仔细分析问题后发现每次出现异常最开始都是出现了大量的jedis连接池获取连接异常:
redis.clients.jedis.exceptions.JedisConnection: Could not get a resource from the pool
...省略其他堆栈信息
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out
...省略其他堆栈信息
而这些time out实际是redis节点故障或者网络抖动引起的。然后看看jedis配置,timeout设置为1000,maxRedirect为2,所以一旦出现redis连接问题,将会导致请求阻塞3s左右。而此服务的qps分摊到单机约为200,阻塞导致了dubbo请求的堆积,进而导致雪崩。处理方法:缩短timeout;去除redirect;根据业务请求考虑增加熔断组件。
另外通过jstack分析,发现一旦出dubbo线程池耗尽的问题,大量的dubbo处理线程都是处于WAITING(parking)状态,卡顿在获取redis连接。分析jedis连接管理相关代码,jedis连接池使用ReentrantReadWriteLock管理,获取连接涉及锁资源的争夺,而redis server节点无法连接将导致连接池需要尝试创建新的连接,这个过程会拿走写锁,导致其他需要通过读锁获取连接的线程进入等待。所以
也需要根据qps设置maxTotal(这个出现问题的jedis居然设置的连接数为10!)。
spark服务使用jedis访问redis导致redis服务毛刺
我们所使用的redis cluster集群是个比较大集群,具有数十个节点,集群的读写压力都相当大。其中一部分读写操作来自其他同事维护的spark服务,使用jedis访问。
现象:发现redis的响应时间出现有规律的毛刺。
DBA排查发现redis集群的一个节点的负载相对于其他节点比较高,而且出现大量的cluster slots命令。
分析:分析jedis源码,jedis每次初始化创建连接都是从第一个节点开始尝试并执行cluster slots命令来获取整个redis cluster集群的拓扑信息;如果jedis连接池获取的连接失效,也会执行renewSlotCache,renewClotCache也是会执行cluster slots命令的。
经过推断及分析,问题出在spark使用jedis的模式上,spark每个批次任务都会创建新的jedis连接,批次处理完成即销毁掉,所以spark任务执行过程中会反复执行jedis连接池的初始化进而执行cluster slots命令,而从DBA了解到cluster slots命令是比较耗资源的,所以导致了第一个节点负载比较高(jedis连接串固定的,所以第一个节点总是被执行cluster slots命令)。
处理:通过打散jedis连接串上节点的顺序来避免总是固定的第一个节点被用来执行cluster slots。此方法实施后,毛刺确实消失了。
疑问:上述方法可以说只是缓解了redis节点负载不均衡的问题,但是由于对spark使用不太了解,所以暂时不知道是否有办法在多个批次任务间共享jedis连接。
jedis参数不当引发的问题总结的更多相关文章
- mysql参数max_binlog_cache_size设置不当引发的血案
日常运维中的坑真是防不胜防,不一小心就遇到别人给你挖的坑.最近又遇到经验不足的DBA不知道从哪拷贝的配置文件(据说是当时参加某培训机构视频培训是资料里的模板,真的是误人子弟呀),其中把max_binl ...
- 一个参数大小写引发的uploadify报错 "Syntax error, unrecognized expression: #"
上传控件uploadify 报错"Syntax error, unrecognized expression: #" 版本为 uploadify3.2 报错原因:参数ID[hi ...
- Proguard中optimize设置不当引发SimException
今天来说一下Proguard中关于optimize的问题.先上一张异常图片 最近项目重构,重新调整了各个组件之间的依赖关系.过程中,在项目Proguard这块卡住了,最开始还好,Proguard只是提 ...
- 随机数使用不当引发的生产bug
前几天负责的理财产品线上出现问题:一客户赎回失败,查询交易记录时显示某条交易记录为其他人的卡号. 交易的链路如下: 出现该问题后,我们对日志进行了分析,发现主站收到的两笔流水号完全相同,然而主站却没有 ...
- NSTimer使用不当引发的内存泄漏问题
NSTimer可以用来执行一些定时任务,比较常用的方法就是: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTar ...
- Web安全开发之验证码设计不当引发的撞库问题
感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复.以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题,甚至在一些银行或者电商的登录与查存页面同样存在这个问题,一旦造成撞库无论对 ...
- Select 使用不当引发的core,你应该知道的
排查一个死机问题,搞了好几天时间,最终确定原因:最终确定问题原因,在此分享一下: 第一步:常规根据core文件查看栈信息,gdb –c core xxxx 如下rip不正确,指令地址错乱,栈信息已破坏 ...
- php 扩展 suhosin 配置不当引发的报错及其解决方法
1. /var/log/messages 频繁报错: Jul :: localhost suhosin[]: ALERT - script tried to increase memory_limit ...
- RestTemplate使用不当引发的问题分析
背景 系统: SpringBoot开发的Web应用: ORM: JPA(Hibernate) 接口功能简述: 根据实体类ID到数据库中查询实体信息,然后使用RestTemplate调用外部系统接口获取 ...
随机推荐
- nodejs之express生成项目[windows平台]
安装nvm,nvm下载地址 用于管理多个版本node,此处可省略! 安装nodejs,nodejs下载地址 淘宝镜像 安装cnpm命令,后面包可以使用cnpm命令安装,此处可省略,如果安装了 ...
- HTML5之contenteditable可编辑属性
运用contenteditable实现输入框高度自动增加,输入框标题name相对高度自动居中,代码如下: <!DOCTYPE html> <html> <head> ...
- 2016级移动应用开发在线测试13-Location、Sensor & Network
有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. 充分利用智能手机的GPS定位信息,创造了O2O的商业模式,打通了线上与线下的信息流和商流,极大地推动了移 ...
- IDEA的foreach循环
试了试其他快捷键, 突然发现的... 先弄一个list 再把变量名写出来先 按快捷键 ctrl+alt+J, 选最后一个 看效果
- 微信小程序之页面传参
效果图: 点击编辑值传过去了,那么编辑支出类型这个界面又是如何获取到值呢? 传值代码: type.js editType: function (e) { var typeId = e.currentT ...
- zookeeper安装运行(docker)
拉取镜像docker pull zookeeper:latest 获取镜像基本信息docker inspect zookeeper mkdir /opt/zookeeper -p vim /opt/z ...
- koa2 get post api restful前端联调
1.git https://github.com/MengFangui/koa2-restful-api 2.示例代码 //引入 Koa 服务器 const koa = require('koa'); ...
- docker nginx安装
安装nginx镜像docker search nginxdocker pull nginx 启动Nginx容器docker run -it -d --name n1 -v/home/n1/nginx. ...
- hibernate的load和get有什么作用
① load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常(ObjectNotFoundException)load方法加载实体对象的时候,根据 ...
- Windows10下安装Git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.具体安装步骤如下: 第一步:先从官网下载最新版本的Git 官网地址:https://git-scm.com/do ...