2012-10-04 2 views
0

커서가없는 커서가 달린 컬렉션 (mongodb)을 실행 중입니다. 그것은 갑자기, 20-300 초 후에 100 % cpu로 점프되고 몽고 스탯은 getmore이 완전히 멈출 때까지 잘 돌아갑니다. Epoll 버그 (?)가 100 % CPU를 소비합니다 (Python, PyMongo, Tornado)

나는 파이썬 스크립트에 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 파일을 트리거하는 코드는 다음과 같습니다

( threading.thread()와) 별도의 스레드에서 실행
while WSHandler.cursor.alive: 
     try: 
      doc = WSHandler.cursor.next() 

.

(I 토네이도 웹 소켓, DB에 삽입하기위한 세 가지 MongoDB를 스크립트, 커서를 미행 하나의 스크립트를 사용하고 있습니다. cprofile 명령은 미행 스크립트에서입니다.)

답변

1

이것은 토네이도 세 IOLoops를 실행하여 발생 된 세 가지 스크립트로 이것은 IOLoop이 사용하는 epoll을 엉망으로 만듭니다. 세 스크립트 모두를 하나에 넣으면서 해결됩니다 IOLoop.

및 실행 중 AWS micro instance!

관련 문제