我们只有一台服务器出现生产问题,并且性能缓慢与TIME_WAIT状态下的大量套接字相关联。如果不把这个问题作为一个巨大的背景,我们基本上知道,每次服务器运行缓慢时,大约80%的服务器套接字都处于TIME_WAIT状态,当然,通过运行netstat我们可以看到这种状态)。具体来说,由于TIME_WAIT超时并离开,当我们的服务器运行缓慢时,我们会看到这些TIME_WAITs经常出现(大约5-10分钟)。
我做了一些调查,发现TIME_WAITs发生在服务器关闭一个活动连接,但保持它周围,以防任何延迟的数据包通过。最后,TIME_WAIT超时了。
不管怎么说,究竟为什么一个单独的套接字一开始就进入TIME_WAIT状态?这是CentOS 5- Linux是否将此信息记录在var/logs中任何地方,或者是否有任何方法来执行tcpdump并查找导致TIME_WAIT的特定模式?提前谢谢。
发布于 2013-04-05 12:54:01
简短的回答-这是由于一个应用程序。该应用程序创建短期套接字,关闭它们,然后立即需要打开另一个套接字。惰性与要使用的套接字用完的进程(Es)有关。
在创建套接字时,有一些选项- SO_REUSEADDR和SO_REUSEPORT。它们有一些类似的功能,但我怀疑Centos 5中的SO_REUSEPORT是不可用的。无论如何,套接字调用上的可选设置允许立即重用端口。
所以,一个常用的修复方法是重新编码。它可能是一个网络应用程序,连接几秒钟,然后结束会话。
发布于 2013-04-05 15:18:24
它为套接字设置属性,然后它们由内核允许/强制执行。
http://pubs.opengroup.org/onlinepubs/009695399/functions/setsockopt.html
底线:这要么是滥用网络设施,要么是代码问题。你确实有一个网络应用程序--这个正在吞噬你的系统。我对net的定义是“使用TCP/UDP套接字”。不一定是网络服务器。
https://serverfault.com/questions/496450
复制相似问题