首页 新闻 会员 周边

Java进程假死有点迷茫求大佬们分析分析或给点建议!

0
悬赏园豆:30 [待解决问题]

问题遇到的现象和发生背景

Java程序老是跑着跑着假死了,但是重启之后又可以运行。参考网上的排查教程,我获取到了JVM的相关信息。但是好像看不大明白。有没有大佬,靓仔,小姐姐。帮帮忙,看看这个是不是由于JVM导致的,还是其他的情况!

我的解答思路和尝试过的方法 -- 排查过程

参考文章https://blog.csdn.net/liaomingwu/article/details/125160302第二点:造成假死的可能原因

  1. java线程出现死锁,或所有线程被阻塞;(我没有看到线程全部阻塞)

  2. 数据库连接池中的连接耗尽,导致获取数据库连接时永久等待;mybatis超时时间是默认的。

  3. 出现了内存泄漏导致了OutOfMemory,内存空间不足导致分配内存空间持续失败;服务器的可用内存足够,但是分配给jvm的内存被耗尽的情况,容易出现这种情况;(内存好像也足够,不过老年代占比好像有90%多)。

  4. 服务程序运行过程中替换了jar包,但是没有进行重启服务,这属于不按规则操作引起的问题;(没有操作)

  5. 磁盘空间满,导致需要写数据的地方全部失败;(磁盘充足)

  6. 线程池满,无法分配更多的线程来处理请求,通常是因为线程被大量阻塞在某个请求上;

Huathy的主页 Huathy | 初学一级 | 园豆:172
提问于:2022-07-29 11:30
< >
分享
所有回答(3)
0

jstack
jmap
+
程序日志检查——哪些线程卡死了?

快乐的凡人721 | 园豆:3914 (老鸟四级) | 2022-07-29 11:41
0

从第一张图上看:线程这块没看出有啥问题
从第二张图上看:

  1. 老年代MajorGC进行了7次,一共花了6.684秒,平均每次MajorGC需要1秒(需要优化)
  2. 放大图片仔细看老年代的增长趋势是稳步增长的,而且增长的拐点都是MinorGC以后
    猜测:
    估计是Survivor区设置的太小了,导致每次MinorGC把大量的生命周期短的对象都复制(内存担保机制)到老年代,导致老年代越来越大,看上图2.667G的老年代都快满了。
    方案(尝试):
    把Survivor区调大试试
飒沓流星 | 园豆:1099 (小虾三级) | 2022-07-29 20:07

JVM调优是基于不同的垃圾收集器的,看图上应该不是G1或是ZGC,估摸着是JDK8,默认应该是Parallel Scavenge GC + Parallel OldGC,调优的话需要针对这两个进行

支持(0) 反对(0) 飒沓流星 | 园豆:1099 (小虾三级) | 2022-07-29 20:13
0

检查下绿色活动的线程是干嘛的,就是被那几个线程把系统打死的

-忘川- | 园豆:23 (初学一级) | 2022-08-25 16:32

估计进入死循环了

支持(0) 反对(0) -忘川- | 园豆:23 (初学一级) | 2022-08-25 16:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册