【问题标题】:MongoDB crashes due to out of memory exceptionMongoDB 因内存不足异常而崩溃
【发布时间】:2022-01-08 00:51:23
【问题描述】:

我在 MongoDB 中处理大量数据,最近我托管数据湖的服务器在数据处理完成时不断崩溃。日志文件表明内存不足,并显示以下错误消息:

[conn29] out of memory.

这很奇怪,因为我的服务器磁盘上还有很多空间,所以我很困惑为什么 mongoDB 会因为这个错误而崩溃。以前,我一直在运行 compact 命令以在处理完成后回收任何可用空间。这是否可能只是以某种方式逐渐从 mongoDB 中占用空间并将其返回给操作系统,从而导致内存不足异常?如何监控 mongoDB 的可用内存量?

编辑: 我的服务器的 RAM 大小约为 8GB。我不与其他应用程序共享 mongoDB。缓存大小(使用命令db.serverStatus().wiredTiger.cache 并选择配置的最大字节数)约为 3.7GB。

MongoDB 系统日志文件显示如下:

2021-12-01T07:07:54.843+0000 I COMMAND  [conn29] command nimbus.tmp.agg_out.55 command: renameCollection { renameCollection: "nimbus.tmp.agg_out.55", to: "nimbus.ACTIVITY_STAGE", dropTarget: true, $db: "admin" } numYields:0 reslen:38 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { W: 1 } } } protocol:op_msg 684ms
2021-12-01T07:07:55.146+0000 I COMMAND  [conn29] command nimbus.ACTIVITY_STAGE command: aggregate { aggregate: "RMPlus", pipeline: [ { $match: { $and: [ { DATE_LOADED: "2021-11-30" }, { DATA_TYPE: "activities" } ] } }, { $unwind: { path: "$activities", preserveNullAndEmptyArrays: true } }, { $project: { activities.rowLevelSecurity: 0 } }, { $project: { activities.additionalRMs: 0 } }, { $addFields: { activities.DATA_TYPE: "$DATA_TYPE" } }, { $addFields: { activities.DATE_LOADED: "$DATE_LOADED" } }, { $addFields: { activities.FILE_NAME: "$FILE_NAME" } }, { $addFields: { activities.region: "$activities.rowLevelSecurity.region" } }, { $replaceRoot: { newRoot: "$activities" } }, { $project: { additionalRMCode: 0 } }, { $project: { activityTopics: 0 } }, { $project: { userParticipations: 0 } }, { $project: { entityParticipations: 0 } }, { $project: { rowLevelSecurity: 0 } }, { $project: { text: 0 } }, { $project: { textPreviewLong: 0 } }, { $unwind: { path: "$additionalRMCode", preserveNullAndEmptyArrays: true } }, { $group: { _id: { FILE_NAME: "$FILE_NAME", DATA_TYPE: "$DATA_TYPE", DATE_LOADED: "$DATE_LOADED" }, count: { $sum: 1 }, Values: { $push: "$$ROOT" } } }, { $project: { Values.DATA_TYPE: 0, Values.DATE_LOADED: 0, Values.FILE_NAME: 0 } }, { $project: { DATA_TYPE: "$_id.DATA_TYPE", DATE_LOADED: "$_id.DATE_LOADED", FILE_NAME: "$_id.FILE_NAME", Values: 1, _id: 0, ROW_COUNT: "$count" } }, { $out: "ACTIVITY_STAGE" } ], allowDiskUse: true, cursor: {}, lsid: { id: UUID("c255f805-2156-42d4-8664-e2f851358570") }, $db: "nimbus", $readPreference: { mode: "primaryPreferred" } } planSummary: IXSCAN { DATE_LOADED: 1, DATA_TYPE: 1 } keysExamined:2293 docsExamined:2293 fromMultiPlanner:1 replanned:1 cursorExhausted:1 numYields:2301 nreturned:0 reslen:102 locks:{ Global: { acquireCount: { r: 6804, w: 2250, W: 1 } }, Database: { acquireCount: { r: 4551, w: 2248, W: 2 } }, Collection: { acquireCount: { r: 4550, w: 2247 } } } protocol:op_msg 306799ms
2021-12-01T07:31:03.274+0000 F -        [conn29] out of memory.
mongod.exe    ...\src\mongo\util\stacktrace_windows.cpp(247)           mongo::printStackTrace+0x67x
mongod.exe    ...\src\mongo\util\signal_handlers_synchronous.cpp(361)  ???
mongod.exe    ...\src\mongo\util\allocator.cpp(46)                     mongo::mongoMalloc+0x25x
mongod.exe                                                             ???
mongod.exe                                                             ???

那里有些东西需要上下文,但主要的收获是一切都按计划执行,直到它显示out of memory

【问题讨论】:

  • 最好补充一下您的服务器总 RAM 大小是多少?您是否与其他应用程序共享您的数据库?您的 mongodb cacheSizeGB 的大小或您的 mongodb.conf 文件的内容是多少?
  • 我服务器的 RAM 大小约为 8GB。我不与其他应用程序共享 mongoDB。缓存大小(使用命令db.serverStatus().wiredTiger.cache 并选择配置的最大字节数)约为 3.7GB。
  • 您的数据库大小和索引是多少,当问题发生时,cpu 负载如何?
  • 数据库大小为40GB。当应用程序运行时,CPU 负载为 55%,RAM 负载约为 33%。有没有办法在应用程序在 Windows 上失败的确切实例中捕获 CPU 或 RAM 负载?
  • windows 的事件查看器或 mongod 系统日志中的任何消息?

标签: mongodb memory out-of-memory pymongo


【解决方案1】:

您可以更改 cacheSizeGB 的存储部分或多或少如下所示:

storage:
   dbPath: <the data directory>
   journal:
     enabled: true
   directoryPerDB: true
   engine: wiredTiger
   wiredTiger:
     engineConfig:
       cacheSizeGB: 2

【讨论】:

  • 添加完之后,我需要做的就是重启mongoDB?
  • 是的,这是永久设置配置
  • btw ,考虑到您之前的消息:“不,我认为主机服务器未配置为使用内存交换”,我认为对于 Windows,即使是数据库服务器,您也需要预防性地配置一些交换不推荐,因为它会影响性能...
  • 我明白了,谢谢你的帮助!顺便说一句,我修改了 .cfg 文件,但上面写着Windows could not start MongoDB server on Local Computer。我会将日志文件的内容放在另一条评论中。
  • 您可能需要保留之前的一些设置,例如端口、主机、网络等
【解决方案2】:

MongoDB 系统日志文件显示如下:

2021-12-01T07:07:54.843+0000 I COMMAND  [conn29] command nimbus.tmp.agg_out.55 command: renameCollection { renameCollection: "nimbus.tmp.agg_out.55", to: "nimbus.ACTIVITY_STAGE", dropTarget: true, $db: "admin" } numYields:0 reslen:38 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { W: 1 } } } protocol:op_msg 684ms
2021-12-01T07:07:55.146+0000 I COMMAND  [conn29] command nimbus.ACTIVITY_STAGE command: aggregate { aggregate: "RMPlus", pipeline: [ { $match: { $and: [ { DATE_LOADED: "2021-11-30" }, { DATA_TYPE: "activities" } ] } }, { $unwind: { path: "$activities", preserveNullAndEmptyArrays: true } }, { $project: { activities.rowLevelSecurity: 0 } }, { $project: { activities.additionalRMs: 0 } }, { $addFields: { activities.DATA_TYPE: "$DATA_TYPE" } }, { $addFields: { activities.DATE_LOADED: "$DATE_LOADED" } }, { $addFields: { activities.FILE_NAME: "$FILE_NAME" } }, { $addFields: { activities.region: "$activities.rowLevelSecurity.region" } }, { $replaceRoot: { newRoot: "$activities" } }, { $project: { additionalRMCode: 0 } }, { $project: { activityTopics: 0 } }, { $project: { userParticipations: 0 } }, { $project: { entityParticipations: 0 } }, { $project: { rowLevelSecurity: 0 } }, { $project: { text: 0 } }, { $project: { textPreviewLong: 0 } }, { $unwind: { path: "$additionalRMCode", preserveNullAndEmptyArrays: true } }, { $group: { _id: { FILE_NAME: "$FILE_NAME", DATA_TYPE: "$DATA_TYPE", DATE_LOADED: "$DATE_LOADED" }, count: { $sum: 1 }, Values: { $push: "$$ROOT" } } }, { $project: { Values.DATA_TYPE: 0, Values.DATE_LOADED: 0, Values.FILE_NAME: 0 } }, { $project: { DATA_TYPE: "$_id.DATA_TYPE", DATE_LOADED: "$_id.DATE_LOADED", FILE_NAME: "$_id.FILE_NAME", Values: 1, _id: 0, ROW_COUNT: "$count" } }, { $out: "ACTIVITY_STAGE" } ], allowDiskUse: true, cursor: {}, lsid: { id: UUID("c255f805-2156-42d4-8664-e2f851358570") }, $db: "nimbus", $readPreference: { mode: "primaryPreferred" } } planSummary: IXSCAN { DATE_LOADED: 1, DATA_TYPE: 1 } keysExamined:2293 docsExamined:2293 fromMultiPlanner:1 replanned:1 cursorExhausted:1 numYields:2301 nreturned:0 reslen:102 locks:{ Global: { acquireCount: { r: 6804, w: 2250, W: 1 } }, Database: { acquireCount: { r: 4551, w: 2248, W: 2 } }, Collection: { acquireCount: { r: 4550, w: 2247 } } } protocol:op_msg 306799ms
2021-12-01T07:31:03.274+0000 F -        [conn29] out of memory.
mongod.exe    ...\src\mongo\util\stacktrace_windows.cpp(247)           mongo::printStackTrace+0x67x
mongod.exe    ...\src\mongo\util\signal_handlers_synchronous.cpp(361)  ???
mongod.exe    ...\src\mongo\util\allocator.cpp(46)                     mongo::mongoMalloc+0x25x
mongod.exe                                                             ???
mongod.exe                                                             ???

那里有些东西需要上下文,但主要的收获是一切都按计划执行,直到它显示out of memory

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2011-03-28
    • 2020-12-03
    相关资源
    最近更新 更多