【问题标题】:mongod memory leak inserting documents via C++ driversmongodb内存泄漏通过C ++驱动程序插入文档
【发布时间】:2013-08-01 16:04:51
【问题描述】:

我正在逐行遍历一系列 CSV 文件。对于每一行,我创建一个 BSONObjBuilder 对象,然后将 builder.obj() 添加到 std::vector ...每 10k 行我将向量插入数据库,然后清除向量

mdb.insert(collection, myvector);
myvector.clear()

每个 CSV 文件中有数百万行。我注意到 mongod 进程正在占用越来越多的 RAM ......直到最终内存使用率达到 100%

PID   USER     PR  NT VIRT   RES  SHR S %CPU %MEM
4450 mongod    15   0 73.2g  34g  33g S 45.7 97.0   3848:30 mongod  

这里发生了什么?在我看来好像有内存泄漏?我的代码中绝对没有内存泄漏。

【问题讨论】:

    标签: c++ mongodb memory memory-leaks


    【解决方案1】:

    当您调用clear 时,它会清除元素,但可能不会减少容量。
    已回复here

    无论是老派;

    std::vector<T>(v).swap(v);
    

    请注意,C++11 有 shrink_to_fit,这可能会有所帮助,但可能无济于事。

    【讨论】:

    • 我刚刚再次运行了我的代码,这次我在每一行都插入了 builder.obj(),所以我不使用向量,并且我遇到了同样的内存泄漏。您还有其他建议吗?
    • 不抱歉 - 只是矢量上的清晰对我来说是一个警告。你的文件有多少字节? mongodb 使用了多少内存?
    • 看来我的问题不是内存泄漏,这篇帖子似乎解决了这个问题:stackoverflow.com/questions/4468873/…
    猜你喜欢
    • 2013-09-06
    • 2020-09-02
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2018-10-09
    • 2021-04-17
    相关资源
    最近更新 更多