关闭的Linux套接字未清除

时间:2019-06-13 08:50:33

标签: java linux sockets networking

我有一个正在运行的应用程序,使用几天后,文件描述符出现问题。

在对问题进行故障排除时,我能够确定问题与关闭的套接字没有从系统中清除有关:

$ sudo cat /proc/net/sockstat
sockets used 124282 [..]

$ ss -s
TCP:    122152 (estab 2, closed 122135, orphaned 0, [..]

系统在两种不同的环境中运行,并且仅当应用程序前面有一个LB时,才似乎存在此问题。

经过调查,很多人都遇到类似的问题,但是他们的套接字输出显示“ 无法识别协议”,情况并非如此:

$ lsof -p <pid>
[..]
java    29242 user *759u     sock                0,7       0t0 3244513364 protocol: TCPv6 
[..]

如上面的输出所示,它们显然是TCPv6。

而且,它们没有任何状态:

$ sudo netstat -ant | wc -l
62 

我认为问题可能与系统上某些套接字的关闭方式有关,但不知道是什么导致了这种情况。观察到一些捕获后,所有套接字似乎都使用相同的过程(FIN或RST取决于方向)关闭。

是否有任何建议可以解决套接字处于此状态的原因?或可以调整以解决问题的某些操作系统配置?

谢谢...

0 个答案:

没有答案