Java进程假死案例集合

1. 案例1

今天通过域名调一个接口,10次中偶尔有1-2次请求失败,域名后绑定VIP,VIP后面为5台应用服务器。

1.1 范围缩小

Java进程假死案例集合_第1张图片
直觉怀疑为某一台有有问题,于是单独的进行接口调用发现确实为其中一台有问题

1.2 单台检查

本能上来后首先查看进程,进程正常

jps

telnet本地服务端口8099,也是正常的

telnet 127.0.0.1 8099

单独的curl是出现不可访问,初步怀疑为进程假死。

(1) jstack看一下是否有死锁,无死锁

jstack -F pid

(2) 看一下gc情况

jstact -gcutil pid 5000

Java进程假死案例集合_第2张图片
历史FGC较多,FGC时间非常长,内存耗尽。

(3)查看tomcat日志

[ERROR] fail to async write log SelfLog, GC overhead limit exceeded
Exception in thread "Druid-ConnectionPool-Destroy-962491367" java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread "http-bio-8099-Acceptor-0" java.lang.OutOfMemoryError: GC overhead limit exceeded

核心要点:GC overhead limit exceeded导致Druid-ConnectionPool销毁

你可能感兴趣的:(Java)