JAVA服务假死,请求无法响应什么问题?

某个服务下的所有url请求(包括不存在的url)都无法响应,一直转圈圈,初步排查如下:
top -Hp pid
image.png

系统内存 free -m
image.png

GC信息
image.png

线程堆栈信息。。。信息过长发不出来,我把链接贴上来
https://blog.csdn.net/a343781436/article/details/139834298?cs...

日志信息没有抛异常:
image.png

到底是啥问题呢,谢谢各位大佬~

阅读 2.5k
4 个回答

在这里回复你吧,能贴图:
是的,我自己使用debug调试修改了变量让poller线程结束了,然后再次访问现象就跟你描述的是一样的,socket请求能接收,但是没人处理读写,导致浏览器一直是个X在转圈圈等待。
image.png
查看Poller源码查看是个死循环,只要循环退出Poller线程就结束了,退出有两个条件第一个是tomcat关闭close为true,他就breack跳出循环了,我debug就是修改这个导致他退出的image.png
还有个就是在我在第一张图上红框框住的部分,这部分没有进行tryCatch一旦出现异常,就会导致退出。
所以检查你OOM的原因,就是他导致的。

可以参考以下解决一下:

  1. 排查是否是内存泄漏会导致 JVM 内存不足,从而引起应用程序假死。
  2. 排查代码中是否存在两个或多个线程相互等待对方持有的资源,从而导致永远等待。
  3. 排查线程池是否耗尽,导致没有可用的线程来处理新请求。
  4. 如果链接了数据库,排查有没有可用的线程来处理新请求。
  5. 排查一下文件打开数量是否超过系统限制

似乎像是Seata或者Redis Client出的问题

新手上路,请多包涵

排查一下tomcat线程池是否满了,tomcat的线程池满了也会导致服务假死

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题