我有一个正在运行的应用程序,使用几天后,文件描述符出现问题。
在对问题进行故障排除时,我能够确定问题与关闭的套接字没有从系统中清除有关:
$ 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取决于方向)关闭。
是否有任何建议可以解决套接字处于此状态的原因?或可以调整以解决问题的某些操作系统配置?
谢谢...