현재 sidekiq 4.1.2
을 실행 중입니다. 나는 수 많은 일자리를 동시에 수행 할 수 없었습니다. 최근에 내가 Sidekq의 문제 해결 WIKI에 설명 된 문제에 부딪 쳤던 것처럼 보였습니다. 전화 번호는 Too many connections to MongoDB입니다. 분명히 mongoid 3
은 근로자를 제대로 연결 해제하지 않습니다. 그러나 mongoid 5.1.3
을 사용하고 있습니다. 몇 가지 다른 작업이 실행되는 동안 작업이, 쿼리로 데이터베이스에 접속을 시도Sidekiq, mongoid 연결 시간 초과, 아마도 너무 많은 연결을 dequeueing 실패
내 문제의 표면 : 하나의 작업이 실패
Timeout::Error: Timed out attempting to dequeue connection after 30 sec.
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:190:in `wait_for_next!'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:176:in `block in dequeue_connection'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:190:in `wait_for_next!'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:176:in `block in dequeue_connection'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:172:in `loop'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:172:in `dequeue_connection'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:62:in `block in dequeue'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:61:in `synchronize'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool/queue.rb:61:in `dequeue'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool.rb:51:in `checkout'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/connection_pool.rb:107:in `with_connection'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/server/context.rb:63:in `with_connection'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/operation/executable.rb:34:in `execute'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/collection/view/iterable.rb:80:in `send_initial_query'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/collection/view/iterable.rb:41:in `block in each'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/retryable.rb:51:in `call'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/retryable.rb:51:in `read_with_retry'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/collection/view/iterable.rb:39:in `each'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/query_cache.rb:207:in `each'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/contextual/mongo.rb:121:in `each'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/contextual/mongo.rb:295:in `map'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/contextual/mongo.rb:295:in `map'
/home/me/applications/myapp/shared/bundle/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/contextual.rb:20:in `map'
/home/me/applications/myapp/releases/20160618143407/app/jobs/myjob.rb:8:in `block in perform'
후, 다른 작업은 곧 실패합니다. 이 작업은 몇 개의 수작업이 성공적으로 완료된 후 가장 자주 발생합니다. 이는 작업이 데이터베이스와의 연결이 끊어지지 않았 음을 나타낼 수 있습니다. top
에서 나는 몽고로드 CPU가 너무 많다는 것을 알 수 없습니다.
동시에이 문제가 발생하기 시작하여 sidetiq 0.7.0
활성화 된 되풀이 작업이 올바르게 예약되지 않은 것으로 나타났습니다. 하나의 작업은 대기열에 넣기를 중단하고 다른 작업은 다시 시작한 후에 한 번만 대기합니다.
내 Sidekiq 웹 인터페이스에 따르면 기본값이이고 25 개의 스레드가있는 1 개의 대기열이 있습니다. 맥스. 12-15 명이 동시에 바쁠 때.
이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?
kiqstand를 사용해 보셨습니까? https://github.com/mongoid/kiqstand –
아니요,하지만 Mongoid 3에만 해당됩니다. README에 따르면 최신 버전에는 필요하지 않습니다. – ChristofferJoergensen