Linux:TCP Socket监听:如何检测无法关闭套接字的客户端?

时间:2017-11-29 20:55:13

标签: linux sockets

我们有一个Linux(CentOS)上的应用程序,不时死亡。它只是在套接字上侦听(并对进入的数据做一些事情)。

我们开始认为连接到此套接字的某些客户端可能无法关闭套接字连接,并且这会导致Linux应用程序耗尽资源。 (服务器最终会抛出一个"太多的打开文件" netty异常中的错误。)

我们如何在服务器上测量? (我们没有服务器应用程序的源代码,但我们确实有客户端的源代码。)

netstat -nato似乎很接近,但我们不确定这是整个故事。

2 个答案:

答案 0 :(得分:2)

netstat显示中查找处于CLOSE_WAIT状态的端口。如果您看到很多,则服务器中存在资源泄漏,这不是客户端造成的。相反,如果FIN_WAIT_1中有很多端口,那么您的服务器正在关闭,但您的客户端却没有。这些都不是你正在寻找的,但它们会暴露同源错误。

如果可能,在接受的套接字上设置读取超时,如果得到它,请记录并关闭它们。明智地选择超时间隔。

答案 1 :(得分:-1)

解决方案是使用ls命令,如下所示:

 ls -al /proc/<PID>/fd

将此与wc计数实用程序一起使用

 ls -al /proc/<PID>/fd | wc -l

为我们提供一个过程保持的资源(管道,套接字,文件)数量的简单计数。

然后我们可以看到我们的客户端代码需要一个小的调整来可靠地关闭套接字。