[Java] 可复现的 Java 进程卡死,如何排查问题

场景:有一个单独的服务,用于测试一个大的定时任务(包含大量读写操作),定时任务运行大概 30 分钟后,会出现卡死情况。Java 进程还存在但处于暂停状态。日志停止输出,且没有任何报错。

进程信息:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8831 **** 20 0 9781344 2.491g 14912 t 0.0 8.0 23:50.15 java

gc 部分日志:
2021-11-24T09:43:51.293+0800: 58343.178: [GC (Allocation Failure) [PSYoungGen: 1045888K->416K(1047552K)] 1379025K->333593K(2096128K), 0.0061813 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]
2021-11-24T09:44:37.862+0800: 58389.746: [GC (Allocation Failure) [PSYoungGen: 1046944K->288K(1047552K)] 1380121K->333473K(2096128K), 0.0063377 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2021-11-24T09:45:23.641+0800: 58435.526: [GC (Allocation Failure) [PSYoungGen: 1046816K->387K(1047552K)] 1380001K->333597K(2096128K), 0.0063043 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]

卡死后,jmap,jstack 相关指令都无法再执行了。
数据库用的是 oracle 12c,查看还是正常的,所以应该不是数据库的问题。
请问大佬们,现在有啥排查问题的手段吗?

发表评论

您的电子邮箱地址不会被公开。