Java程序老是跑着跑着假死了,但是重启之后又可以运行。参考网上的排查教程,我获取到了JVM的相关信息。但是好像看不大明白。有没有大佬,靓仔,小姐姐。帮帮忙,看看这个是不是由于JVM导致的,还是其他的情况!
参考文章https://blog.csdn.net/liaomingwu/article/details/125160302第二点:造成假死的可能原因
java线程出现死锁,或所有线程被阻塞;(我没有看到线程全部阻塞)
数据库连接池中的连接耗尽,导致获取数据库连接时永久等待;mybatis超时时间是默认的。
出现了内存泄漏导致了OutOfMemory,内存空间不足导致分配内存空间持续失败;服务器的可用内存足够,但是分配给jvm的内存被耗尽的情况,容易出现这种情况;(内存好像也足够,不过老年代占比好像有90%多)。
服务程序运行过程中替换了jar包,但是没有进行重启服务,这属于不按规则操作引起的问题;(没有操作)
磁盘空间满,导致需要写数据的地方全部失败;(磁盘充足)
线程池满,无法分配更多的线程来处理请求,通常是因为线程被大量阻塞在某个请求上;
jstack
jmap
+
程序日志检查——哪些线程卡死了?
从第一张图上看:线程这块没看出有啥问题
从第二张图上看:
JVM调优是基于不同的垃圾收集器的,看图上应该不是G1或是ZGC,估摸着是JDK8,默认应该是Parallel Scavenge GC + Parallel OldGC,调优的话需要针对这两个进行
检查下绿色活动的线程是干嘛的,就是被那几个线程把系统打死的
估计进入死循环了