CLOSE_WAIT表示对方发送一个FIN后,程序这边没有进一步发送ACK以确认。换句话说就是在对方关闭连接后,程序里没有检测到,或者程序里本身就已经忘了这个时候需要关闭连接,于是这个资源就一直被程序占用着。所以处于CLOSE_WAIT本身就表示程序中有bug,需要从程序角度去解决问题。一般情况下,导致CLOSE_WAIT主要有两种可能:
程序Bug,接收到FIN信号后没有及时关闭socket。比如:程序异常,导致close()方法没有执行。
关闭socket不及时;比如:I/O线程太少,导致I/O操作处理不及时,链路不能被及时释放。
Read full article from Java杂谈
No comments:
Post a Comment