0

我正在运行一个带有可尾游标的封顶集合(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 破坏的原因。

但是这是什么意思?(也许这里有提示?)发生了什么事,我该如何解决?

这是最有可能触发 epoll 的代码:

while WSHandler.cursor.alive:
        try:
            doc = WSHandler.cursor.next()

它在一个单独的线程中运行(带有threading.thread())。

(我正在使用 Tornado WebSocket,三个用于插入数据库的 mongodb 脚本,以及一个用于拖尾光标的脚本。cProfile 来自拖尾脚本。)

4

1 回答 1

1

这是由于IOLoops在三个不同的脚本中运行三个 Tornado 造成的。这弄乱了使用的 epoll IOLoop。解决了将所有三个脚本放在一个中IOLoop

并通过运行AWS 微实例!

于 2012-10-07T14:56:00.540 回答