记一次WebSocket的CLOSE_WAIT问题解决
这几天发现线上的服务器有很多CLOSE_WAIT的连接,导致新的请求接不进来。
问题原因
经排查,是WebSocket连接没有正常关闭引起的。
问题解决
直接贴代码:
1 | @Configuration |
解决方法来自这里。
这是设置超时关闭,设置完运行了两天发现情况有所好转,但还是存在CLOSE_WAIT的问题,于是开始重检代码。
经过jstack
大法重检,发现问题在于服务端把所有的WebSocket连接放在一个Hashtable
中。在高并发场景下,Hashtable
撑不住了。
把Hashtable
换成ConcurrentHashMap
,问题解决。