1. 使用jstack pid > thread.txt 打印进 thread.txt 文件里
去观察线程的状态。
我发现,一个线程在经过 rateliter的prefilter后, 先是调用 consume方法,获取到锁。
接着在执行 jedis的 evalsha命令时 一直卡在socket.read()的状态。
发现jedis官网也有一些对应的issue, 我使用的jedis版本是3.1.0 太久了,导致执行 evalsha命令时,旧的jedis源码 设置了无限长的 jedis操作时间。
setTimeoutInfinite() in eval() · Issue #1147 · redis/jedis · GitHub