当我使用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
但是还是有一些问题,如何避免呢?
存在TIME_WAIT是有原因的,原因是TCP数据包可能被延迟并且按顺序到达。 与它混淆会导致额外的断开连接,当他们应该成功。 这里有一个很好的解释 。
你的问题是你没有重用你的应用程序中的MySQL连接,而是每次你想运行一个SQL查询时创build一个新的连接。 这不仅涉及到build立一个TCP连接,还涉及到身份validation信息。 每个查询(或者至less每个前端的web请求)都会发生这种情况,浪费时间。
如果您不知道如何使用您正在使用的任何语言启用持续的MySQL连接池,那么StackOverflow将是一个很好的问题。