比较奇葩的是:本机,开发,生产都没问题,就测试环境有这问题,导致docker容器不停重启,就是起不来。
本机中断程序,同样也会报这个问题
排查了半天,找到原因,应该是redis在频繁取到空值的情况下,就会出现线程被中断的情况,解决办法是在取到空值的情况下让线程睡100ms(Thread.sleep(100L))。
这篇文章有借鉴价值:
https://blog.csdn.net/guntun8987/article/details/128958899
8月22 更新
昨天中午,服务正常了一次,后面重构又不行了,这次还报其他错误
没法办了,只能请教运维一起排查,感觉不单单是代码可以修复的。
果然,运维思路不一样:
“启动不起来是你初始化的时候太多redis操作了,一直被当作未就绪”。
他在kubernates里面把启动探针(livenessprobe)给去掉了
一切就正常了。
当然,有些服务是需要启动探针的,那么可以尝试把initialDelaySeconds(指定容器启动后等待多少秒后开始执行探测)设置大一点。
代码解决不了的问题,一定别憋着,该找运维就找。