StackExchange.Redis执行EVAL超时求助(线程数充足仍报错)
排查StackExchange.Redis EVAL超时问题
Timeout performing EVAL, inst: 2, mgr: Inactive, err: never, queue: 8, qu: 0, qs: 8, qc: 0, wr: 0, wq: 0, in: 3138, ar: 0, clientName: dummy, serverEndpoint: Unspecified/dummy.redis.cache.windows.net:6380, keyHashSlot: 6992, IOCP: (Busy=0,Free=1000,Min=300,Max=1000), WORKER: (Busy=7,Free=32760,Min=300,Max=32767)
已配置ThreadPool.SetMinThreads(300, 300),以及connectionTimeoutInMilliseconds=15000、operationTimeoutInMilliseconds=1000、retryTimeoutInMilliseconds=3000,但IOCP和WORKER线程池Busy值远低于Min阈值时仍出现超时,可从以下方向排查:
- 检查Redis服务器端性能:通过
INFO命令查看服务器CPU使用率(used_cpu_sys、used_cpu_user)、内存占用、慢查询日志(slowlog get 10),确认是否是EVAL脚本本身执行耗时过长,或是服务器负载过高导致响应延迟。 - 排查网络链路:验证客户端到Azure Redis实例的网络稳定性,查看是否存在高延迟、丢包情况,可借助Azure Portal的Redis监控面板查看网络相关指标。
- 优化EVAL脚本:检查脚本是否存在低效操作,比如遍历大量键、使用阻塞命令、未合理利用Redis数据结构,导致单脚本执行时间超过
operationTimeoutInMilliseconds设置的1000ms。 - 确认连接池配置:确保
ConnectionMultiplexer以单例模式使用,无连接泄漏情况;检查syncTimeout、connectTimeout等参数是否与业务场景匹配,队列中等待的请求(queue:8)是否因连接池资源不足无法及时发送。 - 排查客户端GC情况:通过性能计数器监控客户端进程的GC停顿时间、Full GC频率,若存在频繁GC,会导致线程无法及时处理Redis响应,进而触发超时。
- 检查Azure Redis节流状态:查看Azure Portal中Redis实例的监控指标,确认是否存在请求节流(Throttled Connections),当前SKU是否能承载业务流量。
内容的提问来源于stack exchange,提问作者Kria
相关产品推荐
相关产品推荐

