[REDIS] 어떻게 붙어 / 오래된 Resque 노동자를 삭제합니까?
REDIS어떻게 붙어 / 오래된 Resque 노동자를 삭제합니까?
당신이 첨부 된 이미지에서 볼 수 있듯이, 나는 붙어 것 같다 노동자의 몇 가지있어. 이러한 프로세스는 몇 초보다 오래 걸릴해서는 안된다.
나는 확실히 그들은 분명하지 이유 또는 수동으로 제거하는 방법을 모르겠어요.
나는 Heroku가 자동으로 규모의 노동자 레디 스 간 이동 및 HireFire와 Resque을 사용 해요.
해결법
-
==============================
1.나를 위해 일한 이러한 솔루션 중에, 나는 아직도 레디 스 - 웹에서 볼 않을 것이다 :
나를 위해 일한 이러한 솔루션 중에, 나는 아직도 레디 스 - 웹에서 볼 않을 것이다 :
0 out of 10 Workers Working
마지막으로,이 모든 노동자를 취소 나를 위해 일한 :
Resque.workers.each {|w| w.unregister_worker}
-
==============================
2.콘솔에서 :
콘솔에서 :
queue_name = "process_numbers" Resque.redis.del "queue:#{queue_name}"
그렇지 않으면 당신과 함께, 그들을 제거하기 위해 수행되는 것으로 가짜 그들에게 시도 할 수 있습니다 :
Resque::Worker.working.each {|w| w.done_working}
편집하다
많은 사람들이 대답을 upvoting되었고, 나는 위의 코드는 큐를 삭제 반면에 사람들이 큐 떨어져있는 등록을 취소 노동자 hagope의 솔루션을 시도하는 것이 중요하다고 생각합니다. 당신이 가짜 그들에게 행복 경우, 냉각.
-
==============================
3.콘솔을 열고 현재의 노동자를 얻을 수 있도록 당신은 아마의 resque 보석이 설치되어
콘솔을 열고 현재의 노동자를 얻을 수 있도록 당신은 아마의 resque 보석이 설치되어
Resque.workers
그것은 노동자의 목록을 반환
#=> [#<Worker infusion.local:40194-0:JAVA_DYNAMIC_QUEUES,index_migrator,converter,extractor>]
예를 들어 첫 번째를 들어, 노동자와 prune_dead_workers를 선택
Resque.workers.first.prune_dead_workers
-
==============================
4.hagope에 의해 대답에 추가, 나는 일정 시간 동안 실행했던에만 등록 취소 근로자 수 있기를 원했다. 아래의 코드는 등록 취소 근로자는 300 초 (5 분) 동안 실행됩니다.
hagope에 의해 대답에 추가, 나는 일정 시간 동안 실행했던에만 등록 취소 근로자 수 있기를 원했다. 아래의 코드는 등록 취소 근로자는 300 초 (5 분) 동안 실행됩니다.
Resque.workers.each {|w| w.unregister_worker if w.processing['run_at'] && Time.now - w.processing['run_at'].to_time > 300}
https://gist.github.com/ewherrmann/8809350 : 나는 또한이를 추가 한 Resque 관련 레이크 작업의 진행 컬렉션이
-
==============================
5.서버를 시작하는 명령을 실행 곳이 명령을 실행
서버를 시작하는 명령을 실행 곳이 명령을 실행
$ ps -e -o pid,command | grep [r]esque
당신은 다음과 같이 표시되어야합니다 :
92102 resque: Processing ProcessNumbers since 1253142769
내 예제에서 PID (프로세스 ID)의 메이크 노트는 92102입니다
그럼 당신은 과정 1 2의 방법을 종료 할 수 있습니다.
* 나는 중 92102를 종료 또는 QUIT되고 있는지 구문 아니에요 -92102
당신은 어떤 문제가 있다면 알려주세요.
-
==============================
6.난 그냥했다:
난 그냥했다:
% rails c production irb(main):001:0>Resque.workers
노동자의 목록을 얻었다.
irb(main):002:0>Resque.remove_worker(Resque.workers[n].id)
... n은 작업자의 불필요한 제로되는 인덱스이다.
-
==============================
7.나는 레디 스가 무효 (비 실행) 근로자를 포함 디스크에 DB를 저장 한 비슷한 문제가 있었다. 때마다 레디 스 / resque들이 등장하기 시작했다.
나는 레디 스가 무효 (비 실행) 근로자를 포함 디스크에 DB를 저장 한 비슷한 문제가 있었다. 때마다 레디 스 / resque들이 등장하기 시작했다.
이 사용 수정 :
Resque::Worker.working.each {|w| w.done_working} Resque.redis.save # Save the DB to disk without ANY workers
당신이 레디 스하고 Resque 근로자를 다시 시작합니다.
-
==============================
8.다음은 호스트 이름으로 레디 스에서 그들을 제거하는 방법입니다. 내가 서버를 해제하고 근로자가 정상적으로 종료되지 않을 때 나에게 발생합니다.
다음은 호스트 이름으로 레디 스에서 그들을 제거하는 방법입니다. 내가 서버를 해제하고 근로자가 정상적으로 종료되지 않을 때 나에게 발생합니다.
Resque.workers.each { |w| w.unregister_worker if w.id.start_with?(hostname) }
-
==============================
9.나는이 문제에 달려 여기에 가장 많은 추천을 구현하는 경로 아래로 시작했다. 그러나, 나는 내가 보석 레디 스-RB 3.3.0을 사용하던 것을이 문제를 생성 된 근본 원인을 발견했다. 레디 스-RB 3.2.2으로 다운 그레이드 처음에 갇히지에서 이러한 노동자를 방지.
나는이 문제에 달려 여기에 가장 많은 추천을 구현하는 경로 아래로 시작했다. 그러나, 나는 내가 보석 레디 스-RB 3.3.0을 사용하던 것을이 문제를 생성 된 근본 원인을 발견했다. 레디 스-RB 3.2.2으로 다운 그레이드 처음에 갇히지에서 이러한 노동자를 방지.
-
==============================
10.최근 https://github.com/shaiguitar/resque_stuck_queue/에 작업을 시작했다. 그것은 붙어 근로자를 해결하는 방법에 대한 해결책은 아니지만 내가 그것을이 스레드에서 사람들에게 도움이 될 수있는 생각, 그래서 붙어되고 resque 매달려 /의 문제를 해결합니다. README에서 :
최근 https://github.com/shaiguitar/resque_stuck_queue/에 작업을 시작했다. 그것은 붙어 근로자를 해결하는 방법에 대한 해결책은 아니지만 내가 그것을이 스레드에서 사람들에게 도움이 될 수있는 생각, 그래서 붙어되고 resque 매달려 /의 문제를 해결합니다. README에서 :
resque가 특정 기간 내에 작업을 실행하지 않는 경우 ", 당신의 선택의 미리 정의 된 핸들러를 트리거합니다. 당신은 더 resque 노동자, 다시 시작 resque를 추가, 이메일, 호출기 의무를 보내려면이를 사용하여 당신에게 TXT을 보낼 수 있습니다. ..whatever 정장을. "
생산에 사용하고 지금까지 나를 위해 꽤 잘 작동합니다.
-
==============================
11.내가 여기에 너무 붙어 / 오래된 resque 노동자가 있고, 또는 근로자가 실제로 여전히 존재하고 벌금을 실행하기 때문에 나는 '작업'을 말해야한다, 그것은 붙어있는 갈래의 과정입니다.
내가 여기에 너무 붙어 / 오래된 resque 노동자가 있고, 또는 근로자가 실제로 여전히 존재하고 벌금을 실행하기 때문에 나는 '작업'을 말해야한다, 그것은 붙어있는 갈래의 과정입니다.
나는 그 노동자가 바로 큐의 다음를 생성, bash는 스크립트를 통해,보다 5 분 이상 이후 갈래 과정 "처리"를 죽이는 잔인한 솔루션을 선택하고, 모든가는 유지
여기 내 스크립트를 보라 : https://gist.github.com/jobwat/5712437
-
==============================
12.내가 직접 레디 스-CLI에서 그들을 삭제했습니다. 다행히 redistogo.com는 Heroku가 외부 환경에서 액세스 할 수 있습니다. 목록에서 죽은 노동자의 ID를 가져옵니다. 광산이었다
내가 직접 레디 스-CLI에서 그들을 삭제했습니다. 다행히 redistogo.com는 Heroku가 외부 환경에서 액세스 할 수 있습니다. 목록에서 죽은 노동자의 ID를 가져옵니다. 광산이었다
55ba6f3b-9287-4f81-987a-4e8ae7f51210:2
직접 레디 스에서이 명령을 실행하십시오.
del "resque:worker:55ba6f3b-9287-4f81-987a-4e8ae7f51210:2:*"
당신은 무대 뒤에서 무엇을하고 있는지 볼 레디 스 DB를 모니터링 할 수 있습니다.
redis xxx.redistogo.com> MONITOR OK 1380274567.540613 "MONITOR" 1380274568.345198 "incrby" "resque:stat:processed" "1" 1380274568.346898 "incrby" "resque:stat:processed:c65c8e2b-555a-4a57-aaa6-477b27d6452d:2:*" "1" 1380274568.346920 "del" "resque:worker:c65c8e2b-555a-4a57-aaa6-477b27d6452d:2:*" 1380274568.348803 "smembers" "resque:queues"
두 번째 마지막 줄은 노동자를 삭제합니다.
-
==============================
13.당신이 Resque의 최신 버전을 사용하는 경우, 당신은 내부 API를 변경으로 다음 명령을 사용해야합니다 ...
당신이 Resque의 최신 버전을 사용하는 경우, 당신은 내부 API를 변경으로 다음 명령을 사용해야합니다 ...
Resque::WorkerRegistry.working.each {|work| Resque::WorkerRegistry.remove(work.id)}
-
==============================
14.이는 당신이 1.26.0보다 최신 resque 버전이 같은 문제를 피할 수 있습니다 :
이는 당신이 1.26.0보다 최신 resque 버전이 같은 문제를 피할 수 있습니다 :
resque: env QUEUE=foo TERM_CHILD=1 bundle exec rake resque:work
는 현재 실행중인 작업의 마무리를하지 않고 있음을 유의하십시오.
-
==============================
15.당신은 또한 모든 구조 노동자를 중지 명령 아래에 사용할 수 있습니다
당신은 또한 모든 구조 노동자를 중지 명령 아래에 사용할 수 있습니다
sudo kill -9 `ps aux | grep resque | grep -v grep | cut -c 10-16`
이 링크에서 참조
from https://stackoverflow.com/questions/7416318/how-do-i-clear-stuck-stale-resque-workers by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 익스프레스 응용 프로그램에서 디버깅 제거하려면? (0) | 2019.12.31 |
---|---|
[REDIS] 어떻게 생산 resque 노동자를 배포하려면? (0) | 2019.12.31 |
[REDIS] 레디 스 명령은 사용 가능한 모든 키를 얻으려면? (0) | 2019.12.31 |
[REDIS] 어떻게 레디 스 서버를 중지 할 수 있습니다? (0) | 2019.12.31 |
[REDIS] 레디 스에서 파이프 라인을 사용할 때 왜 이렇게 10 만 개 레코드로 둔화되고? (0) | 2019.12.31 |