[mysql] 最近老是遇到连接数打满的情况,求助

260 天前
 yuyang1992test

默认的最大连接数是 151 ,改到了 1000 ,暂时解决。 我排查代码,用的 gorm,是有设置连接数的

	db, err := gorm.Open("mysql", c.DSN)
	if err != nil || db == nil {
		panic(err)
	}
	db.DB().SetMaxIdleConns(c.MaxIdle)
	db.DB().SetMaxOpenConns(c.MaxConn)

但是执行 select * from information_schema.PROCESSLIST 会看到很多 command 是 sleep 我排查代码应该是没有未提交的事务 我自己起终端测试,在提交了事务后还是会有 sleep, 只有吧客户端关了才可以 是和 mysql 的 wait_timout 有关系吗?我看这个默认 8 小时,一般线上这个值是多少?

1889 次点击
所在节点    MySQL
5 条回复
idontnowhat2say
260 天前
感觉是你用完了连接没有放回池子。

一般 wait_timeout 要看 连接池有没有 keepalived 的机制,没有的话就会用 linux 自己的 tcp 连接 keepalived 参数。wait_timeout 要确保至少大于长链接心跳间隔。
yuyang1992test
260 天前
@idontnowhat2say 我没看到 gorm 需要手动放回池子的操作,我设置 wait_timeou=600 秒看起来是解决了,现在 show processlist 不会有 sleep 超过 600 秒的了
davionnini
260 天前
1.是不是有重复创建链接的场景
2.是不是事务没有 commit
3.你可以 show processlist 查看 ip 看看来源是那个机器,在定位一下具体哪一行代码
4357
260 天前
gorm 有连接池,且不需要手动释放。同一个连接给多次查询复用
默认的 8 小时是连接释放的时间
XuHuan1025
260 天前
因为你用了 jetbrain

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1029081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX