StackExchange.Redis Timeout performing 超时问题
最近在做的一个项目,用的.net core 2.1,然后缓存用的Redis,缓存相关封装是同事写的,用的驱动是StackExchange.Redis
version 2.0.571
,一直听说这个驱动并发情况下有TimeOut bug,项目开发差不多后,我压测了一下,简单的模拟30个用户持续访问某一个有用到缓存的查询接口,结果这么小的压力下超时异常出现:
Timeout performing GET my_141 (5000ms), inst: 30, qu: 0, qs: 20, in: 20320, serverEndpoint: 172.16.3.119:6379, mgr: 10 of 10 available, clientName: s-119, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=120,Free=32747,Min=1,Max=32767), v: 2.0.571.20511(Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts))
后面是堆栈信息.....
蛋疼了很久,搜了很多文章,得到以下
解决方案
1、换掉,不用这个驱动( 可以看看.net core redis 驱动推荐,为什么不使用 StackExchange.Redis)
2、redis操作修改为全部异步&& ThreadPool.SetMinThreads(200, 200);
我用的第二种解决了问题,主要换驱动也可能遇到坑;还有时间成本问题;
原因简析
我们看到以上的异常信息当中有这么一段:
IOCP: (Busy=0,Free=1000,Min=1,Max=1000),
WORKER: (Busy=120,Free=32747,Min=1,Max=32767),
意思是当前繁忙的WORKER 线程有120个,而系统“要由线程池根据需要创建的新的最小工作程序线程数。”,也就是系统创建的工作线程数不足以满足redis的Get操作的繁忙线程的需求,导致部分Get操作的线程堵塞超时了;
所以我们把“最小线程workerThreads” 修改为200解决问题;
最新文章
- yii模块下面的组件
- Windows下安装 使用coreseek
- [leetcode]Find Minimum in Rotated Sorted Array @ Python
- CMD方式修改MySQL的root用户密码
- Linux securecrt破解
- Java was started but returned exit code=13 C:\ProgramData\Oracle\Java\javapath\javaw.exe
- C#中out和ref使用
- Object传入String类型和其他
- Aho_Corasick自动机(AC自动机)
- JQuery的父、子、兄弟节点查找,节点的子节点循环
- django中间件templates写法
- C# 语言规范_版本5.0 (第12章 数组)
- 关于wooyun-2015-096990的总结
- Adobe Premiere Pro CS6 下载安装包成功
- html5之上的图片处理
- 20172328《程序设计与数据结构》实验四 Android程序设计报告
- extends 与implements的区别和用法
- P3649 [APIO2014]回文串
- httpd 2.4连接php-fpm
- docker命令相关
热门文章
- SkyWalking分布式链路追踪和监控-项目实战
- 分享windows 10 下部署 elasticsearch 和 logstash (二)
- 【maven】搭建maven私服--基于CentOS7.6+docker
- AES加解密异常java.security.InvalidKeyException: Illegal key size
- Java获取客户端真实IP地址
- Delphi CreateProcess
- Android Studio 3.5+ 使用androidx的recyclerView
- spring boot的异常处理
- The listener supports no services oracle注册监听
- 变量、数据类型、python内存管理