因此,情况是这样的:vert.x backend app有一个worker verticle示例,它从服务类调用一个静态方法,然后从第三个java库调用一个方法,该库发出一些请求并返回结果。
问题出现在第三方lib调用挂起的特定情况下。应用程序会无限期地停留在
java.base@11.0.8/java.net.SocketInputStream.socketRead0(Native Method)
以及vert.x BlockedThreadChecker
开始抛出警告:
WARNING: Thread Thread[vert.x-worker-thread-18,5,main]=Thread[vert.x-worker-thread-18,5,main] has been blocked for 61537 ms, time limit is 60000 ms
眩晕没有React。
我在寻找这个问题的解决办法。如果有其他选择或时间的话,更改整个第三方库可能是一种选择。工人垂直(我已经使用)和 executeBlocking
不是解决方案,因为这是一个无限阻塞操作。我试着用单独的看门狗垂直线来识别悬挂物并重新部署它;这在某种程度上帮助了verticle再次发挥作用,但线程检查器仍然发出有关线程被阻塞的警告。
到目前为止,我找到的最好的解决方案是让一个看门狗识别挂起并重新启动整个应用程序,但这似乎有点激进,如果可能的话,我更愿意在不关闭应用程序的情况下这样做。有没有我忽略的选择?
事先谢谢你的建议。
暂无答案!
目前还没有任何答案,快来回答吧!