Epoll窃听器(?)消耗100%CPU(Python、PyMongo、Tornado)

2024-05-15 00:32:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个带有可裁剪游标的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来自尾随脚本。)


Tags: of脚本objectsmongodbcpumethodcprofilecollection
1条回答
网友
1楼 · 发布于 2024-05-15 00:32:56

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

从运行AWS micro instance!

相关问题 更多 >

    热门问题