我编写了一个 PyMongo 脚本来构建大型 MongoDB 表。当它快完成时,它现在突然挂起。设置它的人说,它消耗 2GB 内存已达到极限。
我如何才能调查一般情况?管理员是否应该调整选项以顺利执行(内存限制、缓冲区等)?
我查找了 db.current_op() 并得到:
{'inprog': [{'active': False,
'client': '0.0.0.0:0',
'desc': 'initandlisten',
'lockStats': {'timeAcquiringMicros': {'R': 0,
'W': 2,
'r': 6,
'w': 0},
'timeLockedMicros': {'R': 0, 'W': 100416}},
'ns': 'test',
'numYields': 0,
'op': 'query',
'opid': 1,
'query': {'options.temp': {'$in': [True, 1]}},
'threadId': '0x7fa7c7a71b40',
'waitingForLock': False},
{'active': False,
'desc': 'DataFileSync',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {}},
'ns': '',
'numYields': 0,
'op': 'none',
'opid': 0,
'query': {},
'threadId': '0x7fa7c4605700',
'waitingForLock': False},
{'active': False,
'desc': 'journal',
'lockStats': {'timeAcquiringMicros': {'R': 278218664,
'W': 20638320},
'timeLockedMicros': {'R': 34804203,
'W': 313165131}},
'ns': '',
'numYields': 0,
'op': 'none',
'opid': 0,
'query': {},
'threadId': '0x7fa7c3203700',
'waitingForLock': False},
{'active': False,
'client': '0.0.0.0:0',
'desc': 'TTLMonitor',
'lockStats': {'timeAcquiringMicros': {'r': 2, 'w': 0},
'timeLockedMicros': {'r': 32, 'w': 0}},
'ns': 'local.system.indexes',
'numYields': 0,
'op': 'query',
'opid': 22735364,
'query': {'expireAfterSeconds': {'$exists': True}},
'threadId': '0x7fa7c09ff700',
'waitingForLock': False},
{'active': False,
'desc': 'websvr',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {}},
'ns': '',
'numYields': 0,
'op': 'none',
'opid': 0,
'query': {},
'threadId': '0x7fa7bfffe700',
'waitingForLock': False},
{'active': False,
'desc': 'clientcursormon',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {}},
'ns': '',
'numYields': 0,
'op': 'none',
'opid': 0,
'query': {},
'threadId': '0x7fa7c1e01700',
'waitingForLock': False},
{'active': False,
'desc': 'snapshotthread',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {}},
'ns': '',
'numYields': 0,
'op': 'none',
'opid': 0,
'query': {},
'threadId': '0x7fa7c2802700',
'waitingForLock': False},
{'active': False,
'client': '192.168.101.43:52230',
'connectionId': 15,
'desc': 'conn15',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {}},
'ns': '',
'numYields': 0,
'op': 'killcursors',
'opid': 22735367,
'query': {},
'threadId': '0x7fa7834fb700',
'waitingForLock': False},
{'active': False,
'client': '192.168.101.43:51872',
'connectionId': 13,
'desc': 'conn13',
'lockStats': {'timeAcquiringMicros': {},
'timeLockedMicros': {'r': 0, 'w': 18}},
'ns': 'kolibri.nodes',
'numYields': 0,
'op': 'update',
'opid': 22735070,
'query': {'_id': 'kolibri-236-237-155368'},
'threadId': '0x7fa7833fa700',
'waitingForLock': False}]}
貌似卡住的操作应该是更新$push。我尝试的另一件事是 db.last_status():
{'connectionId': 15, 'err': None, 'n': 0, 'ok': 1.0}
有人可以帮助我理解这一点,并可能提供一些建议(对于初学者),如何检查发生了什么以及可能对常见错误进行一些有用的操作?