我有一个测试套件,它在本地主机上初始化服务器,然后运行数千个压力测试,其中包括启动和停止连接到同一台机器上的本地服务器的客户端。我试图找出客户端向服务器发送 RST 的原因。
这是事件的顺序:
一个观察结果是在很多情况下服务器运行大约 99% 的 CPU,尽管它在几秒/分钟内恢复正常。
最初我认为这可能是因为客户端正在使用先前关闭的连接中的端口,该端口处于 TIME_WAIT 状态,因此当服务器在该连接上发送 SYN、ACK 时,客户端会发出 RST。尽管我对为什么客户端应该在 TIME_WAIT 状态下使用端口持怀疑态度,但后来我使用的是旧的 Fedora core 4 并且认为它可能没有正确实现 TCP/IP :-)。
现在我不相信这是原因,因为围绕解决上述问题所做的所有调整都无助于缓解问题。仅供参考以下是我尝试的更改/etc/sysctl.conf
:
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_tw_reuse = 1
Run Code Online (Sandbox Code Playgroud)
还有一点,这个问题并不一致。事实上,只有在我重新启动服务器并运行所有客户端测试的 15 到 35 个周期之后,我才能重现这个问题。
我用尽了所有我能想到的原因,为什么会发生这种情况,所以如果有人对可能发生的事情有任何想法,请告诉我。
数据包详情
Date & Time No. Time Source Destination Protocol Length Source port Dest port Info
2014-06-25 14:49:45.378209 1032719 1858.494749 ::1 ::1 TCP 94 netview-aix-5 navisphere netview-aix-5 > navisphere [SYN] …
Run Code Online (Sandbox Code Playgroud)