mongodb引起内存泄露问题

好久不见,最近程序上有些问题,需要记录一下.

比如mongodb引起的内存泄露问题.

起因需要开多端口复制一套tomcat程序,来进行负载,和备份.但是free 一看根本内存都吃没了.

本来机器上就没啥大程序,而且4G的内存应该很富裕的,但是却被tomcat占去了将近3G的内存,这让我很疑惑(虽然一个tomcat里的项目很多,但是也不应该这么大内存的消耗.),

然后jmap dump了一份进行分析

分析结果如下图


我去,怎么会有这么多未释放的连接?

让它自己分析一下:


看到了吧,全是mongodb的未释放连接...这真会玩...

好了,转回来.

对于mongodb连接用完就释放的问题,我记得有这么个比喻:

当使用mongodb的连接池时,好比园丁浇水,从井里打了一桶水,然后舀了一勺子水浇花,然后把水给倒回井里...

虽然比喻很恰当,但是不释放的话 内存真的吃不消.所以

用完时候 还是请mongoClient.close();

谢谢.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB内存泄漏是指在使用MongoDB数据库时,由于某些原因导致内存无法被正确释放,从而导致内存占用不断增加的问题。这可能导致系统性能下降、响应时间延长甚至系统崩溃。 造成MongoDB内存泄漏的原因可能有多种,以下是一些常见的原因: 1. 错误的查询或索引设计:如果查询或索引设计不合理,可能导致查询效率低下,从而导致内存占用过高。例如,没有正确使用索引或者使用了大量的全表扫描操作。 2. 长时间保持连接:如果应用程序在使用完数据库后没有正确关闭连接,或者保持了过多的空闲连接,可能导致内存泄漏。每个连接都占用一定的内存资源,如果没有正确释放,内存占用不断增加。 3. 内存映射文件:MongoDB使用内存映射文件来提高读写性能,但如果文件句柄没有正确关闭或者文件句柄过多,可能导致内存泄漏。 4. 长时间运行的事务:如果存在长时间运行的事务,并且事务中涉及到大量数据的读写操作,可能导致内存泄漏。 为了解决MongoDB内存泄漏问题,可以采取以下措施: 1. 优化查询和索引设计,确保查询效率高,避免全表扫描操作。 2. 确保应用程序在使用完数据库后正确关闭连接,避免保持过多的空闲连接。 3. 监控和管理内存映射文件,确保文件句柄正确关闭。 4. 针对长时间运行的事务,可以考虑优化事务设计,减少事务的执行时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值