利用多线程读取Mongodb时,运行报如下错误:
十一月 19, 2012 1:55:51 下午 com.mongodb.DBApiLayer$Result killCursor
WARNING: can't clean 1 cursor
com.mongodb.DBPortPool$SemaphoresOut: Out of semaphores to get db connection
原因是数据库连接数太少,资源耗尽。
查看com.mongodb.MongoOptions源代码,其中有connectionsPerHost和threadsAllowedToBlockForConnectionMultiplier两个重要的属性。
connectionsPerHost:每个主机的连接数
threadsAllowedToBlockForConnectionMultiplier:线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。
connectionsPerHost默认是10,threadsAllowedToBlockForConnectionMultiplier默认是5,也就是线程池有50个连接数可供使用。因此只要将这个属性的值加大就可以避免上述错误。
其它属性设置:
maxWaitTime:最大等待连接的线程阻塞时间
connectTimeout:连接超时的毫秒。0是默认和无限
socketTimeout:socket超时。0是默认和无限
autoConnectRetry:这个控制是否在一个连接时,系统会自动重试
In my program, modify:
MongoOptions mongoOptions = new MongoOptions();
mongoOptions.autoConnectRetry = true;
mongoOptions.threadsAllowedToBlockForConnectionMultiplier = 5000;
分享到:
相关推荐
The book covers the necessary features of MongoDB which is needed to get up to speed in knowing about the database. The book covers details on Architecting, Developing and Administering MongoDB. Big ...
MongoDB 是一个流行的开源文档型数据库,以其灵活性和高性能而受到许多开发者的青睐。在MongoDB中,管理用户权限是数据库安全的重要环节。`db.createUser` 方法就是用于创建具有特定权限的用户的。以下是对 `db....
With so many companies opting for MongoDB as their NoSQL database of choice, there's a need for a practical how-to combined with expert advice for getting the most out of the software.
You will get an overview of MongoDB and how to play to its strengths, with relevant use cases. After that, you will learn how to query MongoDB effectively and make use of indexes as much as possible. ...
MongoDB connection timeout(解决方案).md
With so many companies opting for MongoDB as their NoSQL database of choice, there's a need for a practical how-to combined with expert advice for getting the most out of the software. Beginning ...
var db = new MongoDB.Mongo().getDB("mydb"); var colls = db.getCollectionNames(); colls.forEach(function(el) { print(el); }); var coll = db.getCollection("testCollection"); coll.drop(); var doc = { ...
MongoDB是一种流行的开源文档数据库系统,以其灵活性、可扩展性和高性能而受到开发者的青睐。在Java应用程序中,当处理大量并发请求时,有效地管理数据库连接是至关重要的。这就是MongoDB连接池的作用,它能帮助优化...
3. 配置数据目录:默认情况下,MongoDB的数据存储在`C:\data\db`,如果需要更改,可以在安装过程中设置。 4. 添加环境变量:在系统环境变量中添加`MONGO_HOME`指向MongoDB的安装路径,并在`Path`中添加`%MONGO_HOME%...
MongoDB: The Definitive Guide by Kristina Chodorow and Michael Dirolf Copyright © 2010 Kristina Chodorow and Michael Dirolf. All rights reserved.
本文将深入探讨MongoDB与传统DB的异同,并解析它们各自的特点。 首先,从架构层面来看,MongoDB摒弃了关系数据库中的表格结构,采用了一种更加灵活的数据模型。在传统DB中,数据以表格形式存储,每个表格有预定义的...
8. **安全注意事项**:安装完成后,强烈建议执行`mongo` shell中的`use admin`和`db.runCommand({keyFile:"/path/to/keyfile"})`来启用身份验证,并创建用户账户,以增强安全性。 至此,MongoDB 4.2.21已经在Linux...
mongodump --host hostIp --db dbname --out c:/filename MongoDB 还原命令: mongorestore --host hostIp --db dbname c:/filename/dbname 通过这 10 个知识点,我们可以完整地安装和配置 MongoDB 在 Linux 系统...
3. **创建数据目录**:MongoDB的数据存储在`/data/db`路径下,如果该目录不存在,需要手动创建: ``` sudo mkdir -p /data/db ``` 4. **设置权限**:MongoDB需要对数据目录有读写权限,可以使用以下命令: ``` ...
MongoDB Basics, from The Definitive Guide to MongoDB, 2E, shows you how a document-oriented database system differs from a relational database, and how to install and get started using it. You'll ...