我正在运行一个带有可裁剪游标的capped collection(mongodb)。它运行良好,直到-突然,在20-300秒后-它跳到100%的cpu和mongostat显示getmore
完全停止。在
我在python脚本上做了cProfile,发现了这个:
1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
77 0.000 0.000 0.000 0.000 {method 'match' of '_sre.SRE_Pattern' objects}
11 0.000 0.000 0.000 0.000 {method 'partition' of 'str' objects}
34 242.726 7.139 242.726 7.139 {method 'poll' of 'select.epoll' objects}
12 0.000 0.000 0.000 0.000 {method 'pop' of 'dict' objects}
所以epoll在这里是绝对突出的,而其他一切看起来都很正常,这很可能是导致挂机和CPU崩溃的原因。在
但这意味着什么?(提示here也许?)出什么事了,我该怎么解决?在
这是最有可能触发epoll的代码:
^{pr2}$它在单独的线程中运行(使用threading.thread()
)。在
(我使用的是Tornado WebSocket,三个用于插入数据库的mongodb脚本,以及一个跟踪光标的脚本。cProfile来自尾随脚本。)
这是由于在三个不同的脚本中使用Tornado运行三个
IOLoops
。这会给IOLoop
使用的epoll造成混乱。解决了将所有三个脚本放在一个IOLoop
中的问题。在从运行AWS micro instance!
相关问题 更多 >
编程相关推荐