【发布时间】:2017-07-18 18:04:07
【问题描述】:
最终更新:我们通过找到一种无需分叉即可实现目标的方法来解决此问题。但是分叉是问题的根源。
---原帖---
我正在运行 ruby on rails 堆栈,我们的 mysql 服务器是独立的,但与我们的应用程序服务器位于同一站点。 (我们尝试将其换成具有双倍规格的不同 mysql 服务器,但没有看到任何改进。
在工作时间,我们会从没有特定查询的情况下获得其中的一些。
ActiveRecord::StatementInvalid: Mysql2::Error: Lost connection to MySQL server during query
大多数失败的查询都非常简单,一个查询和另一个查询之间似乎没有模式。这一切都是从我从 Rails 4.1 升级到 4.2 开始的。
我不知道该尝试什么。我们的数据库服务器全天的 CPU 使用率低于 5%。我确实收到了来自随机交互失败的用户的错误报告,因此不是查询已经运行了几个小时或类似的事情,当然当他们重试完全相同的事情时。
我们的服务器由 cloud66 配置。
简而言之:我们的 mysql 服务器由于某种原因而消失了,但这不是因为缺乏资源,它也是一个全新的服务器,因为当这个问题开始时我们从另一台服务器迁移。
这也发生在我有时在本地主机上开发功能时,所以我不认为这是一个负载问题。
我们正在执行以下操作:
- 红宝石 2.2.5
- 导轨 4.2.6
- mysql2 0.4.8
更新:根据下面的第一个答案,我昨晚将 max_connections 变量增加到 500,并通过
show global variables like 'max_connections';
我的连接仍然断开,今天的第一个连接仅在几分钟前断开....
ActiveRecord::StatementInvalid: Mysql2::Error: Lost connection to MySQL server during query
我跑了select * from information_schema.processlist;,得到了 36 行。这是否意味着我的应用服务器当时正在运行 36 个连接?或者一个进程可以是多个连接?
更新:我刚刚设置 net_read_timeout = 60(之前是 30)我看看是否有帮助
更新:没有帮助,我仍在寻找解决方案...
这是我删除凭据的 Database.yml。
production:
adapter: mysql2
encoding: utf8
host: localhost
database:
username:
password:
port: 3306
reconnect: true
【问题讨论】:
-
"一个进程可以是多个连接吗?"一般来说,Rails 进程可以使用 database.yml 池中指定的尽可能多的连接,这是上限,因为它们是按需创建并添加到池中的。
-
你使用的是哪个版本的mysql2 gem?
-
正在运行版本 0.4.8
-
嗨@denodster 这个问题有什么运气吗?没有看到任何更新:)
-
结论是分叉不是 Rails 可以处理的,所以我从我们的应用程序中删除了所有分叉,最后我采用了一种不需要我们分叉的不同方法。
标签: mysql ruby-on-rails ruby activerecord cloud66