大量 TIME_WAIT 连接表示 netstat

KTa*_*mas 35 networking linux tcpip debian netstat

好吧,这让我毛骨悚然 - 我看到了大约 1500-2500 个:

root@wherever:# netstat

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:60930         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60934         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60941         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60947         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60962         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60969         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60998         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60802         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60823         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60876         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60886         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60898         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60897         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60905         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60918         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60921         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60673         localhost:sunrpc        TIME_WAIT  
tcp        0      0 localhost:60680         localhost:sunrpc        TIME_WAIT  
[etc...]

root@wherever:# netstat | grep 'TIME_WAIT' |wc -l
1942
Run Code Online (Sandbox Code Playgroud)

这个数字正在迅速变化。

我确实有一个非常严格的 iptables 配置,所以我不知道是什么导致了这种情况。有任何想法吗?

谢谢,

塔马斯

编辑:'netstat -anp' 的输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:60968         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60972         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60976         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60981         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60980         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60983         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60999         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60809         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60834         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60872         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60896         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60919         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60710         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60745         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60765         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60772         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60558         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60564         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60600         127.0.0.1:111           TIME_WAIT   -               
tcp        0      0 127.0.0.1:60624         127.0.0.1:111           TIME_WAIT   -               
Run Code Online (Sandbox Code Playgroud)

小智 29

编辑: tcp_fin_timeout控制 TIME_WAIT 持续时间,它是硬编码在 60s

正如其他人所提到的,有一些连接TIME_WAIT是 TCP 连接的正常部分。您可以通过检查来查看间隔/proc/sys/net/ipv4/tcp_fin_timeout

[root@host ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
Run Code Online (Sandbox Code Playgroud)

并通过修改该值来更改它:

[root@dev admin]# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
Run Code Online (Sandbox Code Playgroud)

或者通过将其永久添加到 /etc/sysctl.conf

net.ipv4.tcp_fin_timeout=30
Run Code Online (Sandbox Code Playgroud)

此外,如果您不使用 RPC 服务或 NFS,您可以将其关闭:

/etc/init.d/nfsd stop
Run Code Online (Sandbox Code Playgroud)

并将其完全关闭

chkconfig nfsd off
Run Code Online (Sandbox Code Playgroud)

  • 呃,tcp_fin_timeout 与处于 time_wait 状态的套接字无关。这会影响 fin_wait_2。 (18认同)
  • +1 diq 的评论。他们没有关系。 (2认同)

Dav*_*ley 26

TIME_WAIT 是正常的。这是套接字关闭后的状态,内核使用它来跟踪可能丢失并迟到的数据包。大量的 TIME_WAIT 连接是获得大量短期连接的症状,无需担心。


cha*_*aos 6

这不重要。这意味着您正在打开和关闭大量 Sun RCP TCP 连接(每 2-4 分钟有 1500-2500 个连接)。TIME_WAIT状态是套接字关闭时进入的状态,以防止消息到达错误的应用程序,就像如果套接字被重用太快一样,以及用于其他一些有用的目的。别担心。

(当然,除非您实际上没有运行任何应该处理那么多 RCP 操作的程序。那么,请担心。)