1. 案例1
今天通过域名调一个接口,10次中偶尔有1-2次请求失败,域名后绑定VIP,VIP后面为5台应用服务器。
1.1 范围缩小
直觉怀疑为某一台有有问题,于是单独的进行接口调用发现确实为其中一台有问题
1.2 单台检查
本能上来后首先查看进程,进程正常
jps
telnet本地服务端口8099,也是正常的
telnet 127.0.0.1 8099
单独的curl是出现不可访问,初步怀疑为进程假死。
(1) jstack看一下是否有死锁,无死锁
jstack -F pid
(2) 看一下gc情况
jstact -gcutil pid 5000
历史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销毁