当前位置: 首页 > 面试题库 >

使用Xorm和Go-MySQL进行连接池

锺星洲
2023-03-14
问题内容

只是从github交叉发布。

我将xorm 0.4.3与go-mysql一起使用。我们使用Golang
1.4。

我们在maxIdleConnetionsmaxOpenConnections中指定了xorm以下内容:

var orm *xorm.Engine
...
orm.SetMaxOpenConns(50)
orm.SetMaxIdleConns(5)

而且我们使用相同的单个xorm实例来查询Mysql。

但是我们仍然看到很多连接的TCP Connection Establised状态,这是远远超过这些数字我已经配置maxIdleConnetionsmaxOpenConnections
我们国家的时候lsof-

app 8747 10568 sandeshsharma 16u IPv4 691032 0t0 TCP 127.0.0.1:57337->127.0.0.1:mysql (ESTABLISHED)

我们还观察到,即使我们停止MySQL,连接号仍保持固定但处于CLOSED_WAIT状态。如果我们关闭应用程序,则所有连接都会消失。

app 8747 10844 sandeshsharma 38u IPv4 505058 0t0 TCP 127.0.0.1:54160->127.0.0.1:mysql (CLOSE_WAIT)

但是在mysql进程列表中,它显示的连接数正确,正如我在maxIdleConnetions和中指定的那样 maxOpenConnections

有人可以解释一下这种行为吗?为什么我们要观察,即使我们已经指定了这么多的TCP连接maxIdleConnetions,并maxOpenConnections分别5
50?


问题答案:

首先,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)在应用程序空闲时关闭连接。



 类似资料:
  • xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 讨论 请加入QQ群:280360085 进行讨论。 驱动支持 目前支持的Go数据库驱动如下: Mysql: github.com/Go-SQL-Driver/MySQL MyMysql: github.com/ziutek/mymysql/godrv SQLite: github.com/mattn/go-sqlite

  • 求你了,我需要你的帮助。 我正在使用TCP连接在java服务器和android应用程序客户端之间建立TCP连接。假设我将发送一个序列化对象,但是每次在客户端,代码都会在中的Obj=(Person)处被阻塞。readObject;其中in是数据对象InputStream,Person是序列化对象。 然而,如果我发送的是字符串或整数,并且我使用Obj=in,代码就可以工作。readObject;直接地

  • 我第一次使用带有IISExpress的新Visual Studio 2013(以前 ASP.net VS2010上的开发服务器使用)。我在尝试调试项目时遇到问题。 这是我在Chrome看到的: 无法与服务器建立安全连接。这可能是服务器的问题,也可能需要您没有的客户端身份验证证书。错误代码:ERR_SSL_PROTOCOL_ERROR 我更新了我的计划—— 与localhost的连接中断。错误代码:

  • 问题内容: 我目前正在使用NEST ElasticSearch C#库与ElasticSearch进行交互。我的项目是一个MVC 4 WebAPI项目,该项目基本上构建了一个RESTful Web服务来访问目录服务信息。 我们才刚刚开始使用NEST,并且由于缺乏文档而陷入困境。那里有用,但是有一些很大的孔。当前,我们需要的所有东西都可以正常工作,但是,我们遇到了一个问题,有时连接可能需要一整秒的时

  • 问题内容: 我正在使用带有标准MySQL连接器API的Jetty 9.2(嵌入式),并且对应该如何设置它感到非常困惑。目前,我的 web.xml 文件中包含以下内容: …这在我的jetty-env.xml中: …然后执行以下代码初始化: 当我尝试启动服务器时,出现错误。我已经在代码初始化中尝试了许多不同的字符串变体,例如删除了对对象的调用,但是我只是不断地获得相同错误的变体,只是值不同。 这两个x

  • 我正在使用Symfony 3和教义2.5。总共有三张表: 给定公司id 2,最终结果应该是这样,但就我个人而言,我无法为它编写一个有效的原则QueryBuilder方法 我有三个可以工作的MySQL查询,它们为我带来了想要的结果。但就我的一生而言,我无法将任何一个问题转换成至少一个工作原理问题。 使用MySQL查询(这实际上可能会帮助这里的一些用户): 我在Doctrine的QueryBuilde