现象: 某门店客户端无法打开页面,到服务端发现也打不开tomcat页面。
tcp发现多个close_wait状态,一查,差不多200个。 tomcat只开了200连接,所以连不上。
dump线程,发现线程都空闲,啥也没干。(为啥?dump晚了?)
17:00远程的,但是日志只到16:43左右,后面没有日志。 说明16:43已经连不上了,所以没有请求。
当时好像看了一下gc,貌似在一直gc吧,忘记了。
最终推测原因: -------------------------------- 某次查某个表超级慢,400多秒,cpu100%,伴随fullGc,后面的sql都变慢, 导致请求都卡住,超时后,客户端主动断开,那么服务端就是close_wait状态了。 直到400秒sql跑完,迅速恢复正常。 所以,根源是那个超慢的sql。
唯一的困惑点: ------------------------------- 当时dump线程为什么都是空闲状态呢? 里面http-apr-7001-exec进程只有10个呢。 但是连接为啥都是close_wait状态呢? 连接应该有对应线程只有才对啊!奇怪。 dump命令有问题? 看了下dump时间,确实是重启前dump的。 -------------------------------
|