java----记录jedispool的一个坑 jedispool导致线程阻塞
文章目录
- 背景
- 代码
- 现象
- 日志
- jedis源码分析
- 结论
背景
一个多线程的消费任务,从kafka读数据放到LinkedBlockingQueue,另一个线程消费此链表数据。
在消费的时候本意期望用redis实现一个锁。
java中有对应的包jedisLock。
从Jedispool中获取一个连接去进行redis操作。
代码
Jedis jedis = jedisPool.getResource();JedisLock lock = new JedisLock(jedis, key, 10000, 30000);try {lock.acquire();//} catch (Exception e) {logger.error("redis connect failed");logger.error(e.getMessage());}} finally {lock.release();}
现象
在测试环境没有问题。
在线上消费一段时间就停止消费。程序处于假死状态。
而且有些时候很长时间不会假死,有些时候一会就会假死。
于是开始排查。
日志
开始消费正常。之后线程开始sleep。程序卡死状态。
jedis源码分析
为了追踪这个数目,设置了一个变量sum,消费一条数据sum++,发现每次都是消费1024个就开始阻塞。
继续跟踪,发现在jedispool获取资源的时候阻塞,也即获取不到资源,阻塞住在获取资源处。
redis配置为最大连接数1024个。
开始思考,为什么获取不到资源不会抛异常,会阻塞,进而去看Jedis源码。
maxWaitMillis默认为-1。
继续追进代码。
到这里,线程就锁住了,获取不到资源。
这时候,我又有一个问题,为什么之前的redis资源不会自己释放呢,之前用线程池的时候,会自己回收,为什么jedisPool没有。必须要手动jedis.close,我去看jedis.close的代码。
结论
1.在使用jedispool的时候一定要注意资源的释放。
2.一定要注意maxWaitMillis的设置。
否则会出现阻塞的问题。一定注意!!!!!!
java----记录jedispool的一个坑 jedispool导致线程阻塞相关推荐
- 记录一下执行xxl定时任务超时导致线程池RejectedExecutionException
记录线程池打满异常 使用xxl-job进行分布式任务调度的坑, 由于优惠券到期提醒定时任务 系统会每天9点去查询提前一天过期的优惠券,当xxl-job执行任务时 调用对应服务的excute方法超时,当 ...
- 【java】java getOrDefault 方法的一个坑,容易导致OOM
文章目录 1.概述 1.概述 我有个环境最近OOM了,然后后来发现了问题原因.主要是如下代码,代码是模拟的. 该段代码的核心就是根据消费组ID,构建一个消费者,如果消费组ID对应的消费者没有,那么创建 ...
- 安装heg时找不到java,记录安装HEG的坑
想处理MODIS数据,下了MRT工具后发现各种问题,现在NASA推荐使用HEG工具来处理MODIS系列产品,除此之外工具对ASTER, MISR, AIRS, and AMSR-E HDF-EOS d ...
- java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
问题 Java中提供了很多调度线程的方法,上一节介绍了其中一种控制线程的方法:如何等待一个线程结束.那么如果不希望等待线程结束,而是根据问题的需要随时都要中断线程使其结束,这种对线程的控制方法该如何实 ...
- Linux主机熵值不足导致SecureRandom线程阻塞问题
Linux主机熵值不足导致SecureRandom线程阻塞问题 linux操作系统熵值不够,导致使用安全随机数时,长时间线程阻塞. 问题定位 使用jdk远程debug,发现线程堆栈停在SecureRa ...
- Tomcat DBCP连接池导致的线程阻塞问题
Tomcat DBCP连接池导致的线程阻塞问题 问题描述 解决流程 问题描述 最近在测试一个多线程任务时出现了我本地项目不报错,不停止,但是刷新任何的页面或者重新加载整个网站服务都无法继续执行操作的问 ...
- 查看java线程堵塞排查_java线程阻塞问题排查
我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题.今天终于了了这个心结.把解决过程总结下和大家分享. 首先用jstack命令打出这个进程的全部线程堆栈.拿到线程dump文件之后,搜索 ...
- java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
java10个基础错误 97%的记录错误是由10个唯一错误引起的 在2016年,一件事在30年内没有改变. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式信任日志 ...
- 我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
97%的记录错误是由10个唯一错误引起的 在2016年,一件事已经30年没有改变了. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式地信任日志文件,因为我们认为事 ...
最新文章
- Ubuntu 下一个 vim 建立python 周围环境 构造
- mysql数学函数名_Mysql数学函数
- javascript学习系列(3):数组中的foreach方法
- Windows修改注册表按键映射
- Win11如何切换应用商店网络 Win11切换应用商店网络的方法
- c++ 结构体遍历_PBRT-E4.3-层次包围体(BVH)(一)
- window.open被浏览器拦截的解决方案
- Qgis3.2编译移植成功文档完整版
- python文件管不了_Python文件_管道与模块编写
- mysql ssh 导入时注意问题
- 自己动手简单实现vbb的URL静态化
- matlab K近邻均值平滑滤波,K近邻均值滤波
- DELL戴尔笔记本电脑找不到或没有DELL触摸板时关闭触摸板方法
- 凯立德地图导航2022年懒人包 安卓版
- 树莓派 python驱动蜂鸣器
- 开机直接进入键盘布局_我win10开机显示选择键盘布局 进不了界面 求助啊
- 关于实时推送系统的那点事
- Bandizip便携版右键菜单注册
- linux编程拼图游戏,cocos2d-x制作拼图游戏
- 企业即时通讯软件的五大作用