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銷燬