2013-01-21 1 views
2

꽤 간단한 질문입니다. celery.task.control.inspect() 님의 active() 메서드를 사용할 때 종종 찾을 수없는 셀러 리 작업 프로세스가 시스템에서 실행되는 것을 볼 수 있습니다. 종종이 과정은 몇 시간 동안 진행될 것입니다. 그리고 나는 그것이 일종의 좀비라고 걱정합니다. 보통 너무 많은 메모리를 사용하고 있습니다.Python Celery - pid로 검색 작업

linux pid로 작업을 찾는 방법이 있습니까? 셀러리 또는 AMPQ 결과 백엔드가이를 저장합니까?

그렇지 않은 경우 어떤 특정 작업이 메모리를 차지하지 않고 앉아있는 것인지 파악하는 다른 방법은 없습니까?

는 ---- 업데이트 :

나는 active()가 특정 상자에 실행중인 작업 없지만, 박스의 메모리가 가득 사용하고, htop이 표시되어 있음을 알려줍니다 때 수행 할 수있는 이들 작업자 풀 스레드는 그것을 사용하지만 동시에 0 % CPU를 사용합니까? 이것이 현재의 랙 공간 설정과 관련이 있고 아무도 대답 할 수 없다면, 나는 여전히 Loren 's를 받아 들일 것입니다.

감사합니다 ~

답변

4

내가 '작업'하여가 '노동자'를 의미한다는 가정을 만들려고하고 있습니다. 그 질문은별로 의미가 없을 것이다.

일부 상황에서는 셀러리 작업자 풀의 프로세스 계층을 이해하는 것이 중요합니다. 작업자 풀은 동일한 구성 (동일한 대기열 집합의 메시지 처리 등)을 공유하는 작업자 프로세스 (또는 스레드) 그룹입니다. 각 풀에는 풀을 관리하는 단일 상위 프로세스가 있습니다. 이 프로세스는 자녀가 사망 할 때 포크로 찍히고 대체 아동을 양성 할 책임이있는 아동 근로자 수를 조정합니다. 부모 프로세스는 AMQP에 바인딩 된 유일한 프로세스이며 자식 프로세스는 IPC를 통해 부모 프로세스를 처리하고 처리합니다. 부모 프로세스 자체는 실제로 모든 작업을 처리 (실행)하지 않습니다.

또한 질문에 대한 답변으로, 부모 프로세스는 셀러리 검사 브로드 캐스트에 응답하는 프로세스이며 풀의 작업자로 나열된 PID는 하위 작업자입니다. 부모 PID는 포함되지 않습니다.

--pidfile 명령 줄 매개 변수를 사용하여 Celery 데몬을 시작하는 경우 해당 파일에는 부모 프로세스의 PID가 포함되므로 참조하는 프로세스와 해당 PID를 상호 참조 할 수 있어야합니다 사실 그것이 풀 상위 프로세스인지를 판별합니다. Celery 멀티를 사용하여 여러 인스턴스 (다중 작업자 풀)를 시작하는 경우 기본적으로 PID 파일은 Celery를 호출 한 디렉토리에 있어야합니다. 이 두 가지 방법 중 하나를 사용하여 셀러리를 시작하지 않는다면 그 중 하나를 사용하여 프로세스가 좀비가 아니며 사실 단순히 부모임을 확인하십시오.

+0

그것은 감각의 톤을 만들어, 감사합니다. 이 경우 나는 액티브()를 사용하여 누출 된 작업을 파악할 수있다. 그러나 이것은 내 질문을 약간 바꾸어 편집하는데 도움이되었다. –

관련 문제