Установка min_pool_size в драйвере Ruby (и, следовательно, Mongoid) не означает, что на самом деле создано много сетевых подключений.Установка min_pool_size создает столько объектов подключения драйверов, но они подключаются к кластеру по требованию.Это поведение может измениться в будущей версии драйвера - см. 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
, вставка в сокеты подключения и т. д.) не является частью общедоступного API драйвера и может измениться в любое время.