最近在做的一个项目,用的.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))
后面是堆栈信息.....

蛋疼了很久,搜了很多文章,得到以下

在.NET Core 2.1项目中使用StackExchange.Redis驱动进行Redis缓存操作时,遇到超时问题。在小压力下,Timeout performing GET异常出现。通过分析异常信息,发现繁忙的WORKER线程数不足,导致线程堵塞超时。解决方案是将ThreadPool的最小工作线程数设置为200,解决了问题,但设置需合理避免性能问题。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



