当我使用 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 将是一个很好的询问场所。