ruby-on-rails - Ruby on Rails,我可以获得 Mongoid 池中当前的连接数吗?

标签 ruby-on-rails mongodb mongoid mongoid6

我已在 mongoid.yml 中将 min_pool_size 设置为 100,但在 mongo 中运行 db.serverStatus().connections 时,我只得到 30。有没有办法检查池中有多少个连接?

最佳答案

在 Ruby 驱动程序(以及 Mongoid)中设置 min_pool_size 并不意味着实际创建了许多网络连接。设置 min_pool_size 会创建那么多驱动程序连接对象,但它们会根据需要连接到集群。此行为已在驱动程序 2.11.0 版中修复 - 请参阅 https://jira.mongodb.org/browse/RUBY-1605 .

要了解给定服务器实际打开了多少个套接字,首先获取其连接池:

pool = Mongoid.default_client.cluster.next_primary.pool
# => #<Mongo::Server::ConnectionPool:0x46944310901400 queue=#<Mongo::Server::ConnectionPool::Queue:0x46944310901380 min_size=20 max_size=100 wait_timeout=1 current_size=20>>

然后查看连接中的套接字:

pool.send(:queue).queue.map { |conn| conn.send(:socket) }.compact.count
# => 0

Flight.count

pool.send(:queue).queue.map { |conn| conn.send(:socket) }.compact.count
# => 1

每台服务器都会打开一个额外的连接/套接字,用于监视目的,但应用程序无法访问该连接/套接字。

请注意,上面发布的所有代码(next_primary、插入连接套接字等)不是驱动程序公共(public) API 的一部分,并且可能随时更改。

关于ruby-on-rails - Ruby on Rails,我可以获得 Mongoid 池中当前的连接数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54781270/

相关文章:

javascript - RoR : destroy. js.erb 未与销毁操作一起运行

ruby-on-rails - 使用 AWS Elastic Beanstalk 部署 Rails ActionCable

ruby-on-rails - 如何修复 mongo 驱动程序 ruby​​ gem 中的 'Cannot start transaction # on session` 错误

Mongoid 关系多态关联

ruby-on-rails - 自定义 Rails 验证未将 'field_with_errors' 包装器添加到输入

javascript - 在使用 Javascript 设计注销后自动重定向?

javascript - MeteorJS 模板不显示数据,不出现

ruby-on-rails - mongodb:获取特定文档然后获取其余文档的最佳方式

javascript - 我如何使用 Node js 从 mongodb 集合中获取单个字段值

ruby-on-rails - 如何使用 Rails 4 删除和销毁 Mongoid 中的嵌入文档