gpt4 book ai didi

MySQL TIME_WAIT ;连接问题太多

转载 作者:可可西里 更新时间:2023-11-01 07:50:20 31 4
gpt4 key购买 nike

当我在现场检查 mysql 加载时间时。我得到的结果显示连接为 TIME_WAIT。即使我关闭了每一页上的连接。有时网站不会加载说连接太多。有什么办法可以解决这个问题?

提前感谢您的任何回复或建议

最佳答案

如果一个客户端连接到一个MySQL-Server,它通常会打开一个本地端口,例如:

 localhost:12345 -> mysqlserver:3306

如果客户端关闭连接,客户端会得到一个TIME_WAIT。由于 TCP 路由,数据包可能会延迟到达临时端口。 TIME_WAIT 中的连接只是丢弃这些数据包。如果没有 TIME_WAIT,本地端口可能会被另一个连接重新使用,并且可能会从以前的连接接收数据包。

在 web 上的一个高频应用程序中,每个请求都会打开一个 mysql 连接,大量的 TIME_WAIT 连接是可以预料的。没有任何问题。

如果您的本地端口范围太小,可能会出现问题,因此您无法再打开传出连接。通常超时设置为 60 秒。因此,在低范围内每秒超过 400 个请求时可能已经出现问题。

检查:

查看TIME_WAIT的数量,可以使用如下命令:

$ cat /proc/net/sockstat
sockets: used 341
TCP: inuse 12 orphan 0 tw 33365 alloc 23 mem 16
UDP: inuse 9 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

“tw”之后的值,在本例中为 33365,表示 TIME_WAIT 的数量。

解决方案:

一个。 TIME_WAIT 调整(基于 Linux 的操作系统示例):

减少 TIME_WAIT 的超时:

# small values are ok, if your mysql server is in the same local network
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

增加本地端口的端口范围:

# check, what you highest listening ports are, before setting this
echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range

设置 /proc/sys/net/ipv4/tcp_tw_recycle/proc/sys/net/ipv4/tcp_tw_reuse 可能也很有趣。 (但我们遇到了这些设置的奇怪副作用,所以最好避免它们。更多信息在这个 answer 中)

持久连接

一些编程语言和库支持持久连接。另一种解决方案可能是使用本地安装的代理,如“ProxySQL”。这减少了新连接和已关闭连接的数量。

关于MySQL TIME_WAIT ;连接问题太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5062839/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com