0

テール可能なカーソルを使用して、上限のあるコレクション (mongodb) を実行しています。突然、20〜300秒後、CPUが100%にジャンプし、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、db に挿入するための 3 つの mongodb スクリプト、およびカーソルをテーリングするための 1 つのスクリプトを使用しています。cProfile はテーリング スクリプトからのものです。)

4

1 に答える 1

1

これはIOLoops、3 つの異なるスクリプトで Tornado を使用して 3 つを実行したことが原因でした。これは、使用する epoll を台無しにしIOLoopます。3 つのスクリプトをすべて 1 つにまとめることで解決しましたIOLoop

そして、AWS マイクロ インスタンスの実行から!

于 2012-10-07T14:56:00.540 に答える