首先,Go 1.4太旧了。使用最新的Go 1.6。这个答案是用Go 1.6的知识编写的。因此,某些细节可能与您的情况有所不同。
连接有四种状态:连接,空闲,正在使用和关闭。MaxOpenConnections限制处于连接,空闲,使用状态的连接数。因此,如果您的应用程序关闭并快速重新打开连接,则可能会发生。
由于TCP是
CLOSED_WAITMySQL服务器端的状态,因此您的应用正在等待EOF连接。我想您的应用负载很高,读取EOF和关闭连接的速度很慢。在读取EOF并关闭连接之前,无论服务器端的TCP状态如何,客户端的TCP状态都是已建立的。
我建议您更新Go和“ go-sql-driver /
mysql”,并设置MaxIdleConns等于MaxOpenConns以避免高重新连接率。相反,您可以使用SetConnMaxLifetime(Go
1.6中的新API)在应用程序空闲时关闭连接。



