避免 TIME_WAIT 连接

避免 TIME_WAIT 连接

当我使用 netstat 命令时,它显示..

tcp        0      0 localhost:18056             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16683             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16701             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16888             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16832             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17725             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17682             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17414             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17606             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17737             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16632             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:16825             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17807             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17715             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17304             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17217             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:18098             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17624             localhost:mysql             TIME_WAIT   
tcp        0      0 localhost:17734             localhost:mysql             TIME_WAIT

Time_wait连接在2000左右。

为了避免这种情况,我添加net.ipv4.tcp_fin_timeout=30/etc/sysctl.conf

但我仍然遇到一些问题,如何避免?

答案1

TIME_WAIT 的存在是有原因的,原因是 TCP 数据包可能会延迟并且无序到达。干扰它会导致额外的连接中断,而这些连接本应成功。有一个这里有对这一切的出色解释

您的问题是,您没有在应用程序中重复使用 MySQL 连接,而是每次要运行 SQL 查询时都创建新连接。这不仅涉及设置 TCP 连接,还涉及通过它传递身份验证凭据。每个查询(或至少每个前端 Web 请求)都会发生这种情况,这很浪费且耗时。

如果您不知道如何在所使用的任何语言中启用持久 MySQL 连接池,那么 StackOverflow 将是一个很好的询问场所。

相关内容