2015-01-02 4 views
4

django 응용 프로그램과 비동기 작업 실행을 위해 Celery/RabbitMQ를 사용합니다. 나는 셀러리와 일하기 시작했다.Django Celery Queue stuck

작업이 실행되고 작업자를 시작하면 모든 것이 완벽하게 작동합니다.

문제는 작업 실행이 언젠가 나중에 중지되는 것입니다. 몇 시간, 하루 또는 때로는 며칠이 지나면. 나는 그것이 불완전한 사형 집행의 결과로부터 만 깨닫는다. 그런 다음 셀러리를 다시 시작하면 보류중인 모든 작업이 실행되고 모든 것이 정상으로 돌아옵니다.

내 질문은 :

  • 어떻게 디버깅 할 수 있습니다 (여기서 찾고 시작하는) 문제가 무엇인지 알아?
  • 문제가 시작된 후 즉시 알려야하는 메커니즘을 어떻게 만들 수 있습니까?

내 스택 : 장고 1.4.8 셀러리 3.1.16 RabbitMQ 당신의 셀러리 노동자 가끔 막히는 경우 Supervisord

감사합니다, 앤디

+0

당신이 RabbitMQ 관리 플러그인을 시도하고 붙어시 RabbitMQ 큐와이있는 경우 문제를 참조하십시오


당신은이 페이지를 본 적이 있나요? 그러면 RabbitMQ와 Celery (5 월)에 문제가 해결되지 않을 것입니다. – nIKUNJ

+0

@nIKUNJ가 그 일을하려고 할 것입니다 – andy

답변

10

(1), 당신은 strace & lsof을 사용할 수 있습니다 어떤 시스템 호출이 멈추는 지 알아 내야합니다. 예를 들어

:

$ strace -p 10268 -s 10000 
Process 10268 attached - interrupt to quit 
recvfrom(5, 

10268은 recvfrom(5 작업자는 파일 기술자로부터 데이터를 수신 수단에서 정지, 셀러리 작업자의 PID이다.

그런 다음 lsof을 사용하여이 작업자 프로세스에서 5이 무엇인지 확인할 수 있습니다.

lsof -p 10268 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
...... 
celery 10268 root 5u IPv4 828871825  0t0  TCP 172.16.201.40:36162->10.13.244.205:wap-wsp (ESTABLISHED) 
...... 

그것은 노동자가 (당신이 5uFD에서 볼 수) TCP 연결에 붙어 얻을 수 있음을 나타냅니다. requests 같은

일부 파이썬 패키지는 당신이 requests를 사용하는 경우,이, 셀러리 작업자 중단의 원인이 피어에서 데이터를 기다리는 차단하고, timeout 인수를 설정해야합니다 바랍니다.

(2) RabbitMQ에서 셀러 리 작업 대기열 크기를 모니터링 할 수 있습니다. 오랫동안 계속 증가하면 셀러리 작업자가 공격을받을 가능성이 큽니다.

https://www.caktusgroup.com/blog/2013/10/30/using-strace-debug-stuck-celery-tasks/

+0

메이트, 저는이 맥주를 당신에게 빚지고 있습니다. 우리는 요청에'timeout '을 사용하지 않았기 때문에이 정확한 문제에 대해 2 개월 동안 고생했습니다. 4 ~ 5 일마다 모든 AWS 서버를 다시 호출해야했습니다. 감사! –

관련 문제