码迷,mamicode.com
首页 > 其他好文 > 详细

关于内存溢出遇到的两种情况

时间:2018-12-28 00:09:59      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:文献   参考文献   操作   驱动   计数器   mon   mongo   情况   报错   

1.处理数据的程序或者服务是x86架构的,容易出现内存溢出。

因为x86的进程,最多允许内存4g、在这4g中又有2g是操作系统等、所以当你查询的数据量非常大的时候,非常容易内存溢出。

2.多线程 容易导致内存溢出(溢出原理细节我还不清楚)

我查询mongo数据量,数据按地区分类,我查到A地区有70000条数据,B地区有60000条数据。我要将两地数据导出成excel,A地导出成功、B地导出报错:内存溢出。

为什么会出现这个异常呢?

这是因为在MongoDB中B地数据的字段比A地多很多。MongoDB对于.net的这个版本的驱动的find方法 底层用的是Dictionary 的Add来获取满足条件的数据集合。但是Dictionary是.net中线程不安全的,MongoDB的驱动可能使用了多线程查询数据、把数据插入集合中,由于B地区的数据一行特别长,插入还没结束,线程跑去插另外一条数据去了,这导致集合内部的一个计数器计算错误,记的数少了,但是插入的这个行数是不会变的,导致行数超越了集合边界,于是报内存溢出。

参考文献:https://blog.csdn.net/liweiblog/article/details/52329740

关于内存溢出遇到的两种情况

标签:文献   参考文献   操作   驱动   计数器   mon   mongo   情况   报错   

原文地址:https://www.cnblogs.com/wholeworld/p/10188216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!