V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
yuyang1992test
V2EX  ›  MySQL

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

  •  
  •   yuyang1992test · 263 天前 · 1892 次点击
    这是一个创建于 263 天前的主题,其中的信息可能已经有所发展或是发生改变。

    默认的最大连接数是 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 小时,一般线上这个值是多少?

    5 条回复    2024-04-02 17:45:03 +08:00
    idontnowhat2say
        1
    idontnowhat2say  
       263 天前
    感觉是你用完了连接没有放回池子。

    一般 wait_timeout 要看 连接池有没有 keepalived 的机制,没有的话就会用 linux 自己的 tcp 连接 keepalived 参数。wait_timeout 要确保至少大于长链接心跳间隔。
    yuyang1992test
        2
    yuyang1992test  
    OP
       263 天前
    @idontnowhat2say 我没看到 gorm 需要手动放回池子的操作,我设置 wait_timeou=600 秒看起来是解决了,现在 show processlist 不会有 sleep 超过 600 秒的了
    davionnini
        3
    davionnini  
       262 天前
    1.是不是有重复创建链接的场景
    2.是不是事务没有 commit
    3.你可以 show processlist 查看 ip 看看来源是那个机器,在定位一下具体哪一行代码
    4357
        4
    4357  
       262 天前
    gorm 有连接池,且不需要手动释放。同一个连接给多次查询复用
    默认的 8 小时是连接释放的时间
    XuHuan1025
        5
    XuHuan1025  
       262 天前
    因为你用了 jetbrain
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.