mongoDB客户端jar占用内存问题(java)

The Java MongoDB driver is thread safe. If you are using in a web serving environment, for example, you should create a single Mongo instance, and you can use it in every request. The Mongo object maintains an internal pool of connections to the database (default pool size of 10).

开始每次访问db,都新建一个Mongo对象,结果服务器4g内存很快被占满。
查看了官网资料,建议一个项目用一个mongo单例。
改了程序,内存消耗稳定在2g左右。
mongodb是基于内存映射的,我特意用同一条查询sql查询一个collection的数据。按说内存中存在collection的映射,内存消耗就不应该增加了。但是每次访问都会导致内存增加。
即使我将collection做成单例的,内存消耗也还是上升。

不过将Mongo对象改成单例后,内存消耗会稳定在一个值。
看了有些大侠关于mongodb的评测,内存消耗和mongodb的池的并发量有关。
我觉得mongodb在内存使用上多少有点问题,猜测一个collection在内存中不是一个映射。

mongodb的连接池设置应该是在com.mongodb.Bytes类中设置的。
static final int CONNECTIONS_PER_HOST;
static
{
CONNECTIONS_PER_HOST = Integer.parseInt(System.getProperty("MONGO.POOLSIZE", "10"));

COLLECTION_REF_ID = new ObjectId(-1, -1, -1);
}

通过这一点,可以在程序中指定mongodb的连接池数量。System.setProperty("MONGO.POOLSIZE", "3");
至于是否有效果,能从变量值里看出来。
虽然Bytes.CONNECTIONS_PER_HOST是protect,但是com.mongodb.MongoOptions的变量connectionsPerHost是public,而在方法reset中被设值。
public void reset() {
this.connectionsPerHost = Bytes.CONNECTIONS_PER_HOST;
this.threadsAllowedToBlockForConnectionMultiplier = 5;
this.connectTimeout = 0;
this.socketTimeout = 0;
this.autoConnectRetry = false;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值