繁体   English   中英

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

[英]Linux: TCP Socket listening: How to detect clients that fail to close socket?

我们在Linux(CentOS)上有一个不时消失的应用程序。 它所做的只是在套接字上侦听(并对传入的数据执行某些操作)。

我们开始认为一些连接到此套接字的客户端可能无法关闭套接字连接,这导致linux应用程序资源不足。 (服务器最终会在Netty异常中引发“打开文件过多”错误。)

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

netstat -nato似乎很接近,但是我们不确定这就是全部。

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

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

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

 ls -al /proc/<PID>/fd

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

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

给我们一个进程保持打开状态的资源(管道,套接字,文件)数量的简单计数。

然后,我们可以看到我们的客户端代码需要进行一些小的调整才能可靠地关闭套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM