beego框架使用心得

一、使用beego的http library 需要注意,默认情况下maxconnectionsperhost参数为-1,即默认不使用连接池。

问题:        大量并发情况下,http底层的tcp连接得不到重复利用,造成大量的tcp短连接。虽然连接使用之后就会被释放,但是tcp完全释放需要一定时间(主要是最后一阶段客户端的time_wait,这个是tcp协议的特性  

                   决定的)导致短时间内客户端机器积累大量tcp连接,最终“爆仓”出现问题。

解决办法:设置http使用tcp连接池,golang里面是自定义一个transport。主要参数如下:

                  http.Transport{

                              ...

                             MaxIdleConns

                             IdleConnTimeout

                             MaxIdleConnsPerHost                             

                             ...  

扫描二维码关注公众号,回复: 2264790 查看本文章

                    }

二、使用beego的orm或者golang-mysql驱动(beego orm实际上就是使用golang-mysql的驱动)需要注意,默认情况下maxidleconns和maxopenconns参数为0,即默认不使用连接池,也不限制连接数。

问题:        1.大量并发情况下,进程与数据库的tcp连接得不到重复利用,造成大量的tcp连接,超过数据库支持的最大连接数后报错 too many connections 

                   2.程序在重复使用数据库tcp连接池中的某个连接时,该命中连接可能已被服务器过期丢弃,而客户端这边认为该连接为过期,还有效。此时会报错 invalid connection 。随后将该连接重连接池中丢弃

解决办法:1.设置数据库连接池,以下是beego orm下设置参考:

                    orm.SetMaxIdleConns("dbname", number)
                    orm.SetMaxOpenConns("dbname", number)
                    2.设置单个数据库连接最大生命周期。值得注意的是,beego orm不提供接口直接的设置,需要获取到orm底层使用的db连接池对象进行参数设置。如下:                     

                    db,_ := orm.GetDB("dbname")
                    db.SetConnMaxLifetime(time duration)
                    注意,以上参数均为数据库连接客户端参数设置,每个参数都不能超过数据库服务器与之相对应的参数值。 

猜你喜欢

转载自blog.csdn.net/L_K1028/article/details/81113043