2014-07-16 6 views
4

최근에 (루비) 작업 큐 시스템을 DelayedJob에서 Resque로 전환했습니다.Rails Resque worker가 mysql에서 실패 함 "연결이 너무 많음"

대기 시간이 줄어들고 데이터베이스 병목 현상이 제거되었지만 이제는 새로운 문제가 발생합니다. 한 명 이상의 직원이 데이터베이스 연결을 종료 할 때 열어 두는 것처럼 보입니다. 프로세스 목록을 보면 '수면'상태에있는 수백 개의 연결이 있습니다. 결국 90 초 후에 시간 초과됩니다. 우리는 클라이언트 연결이 끊어지지 않도록 직원을 억제했지만 실제로 을 찾으려면 mysql2 ruby ​​클라이언트를 사용하여 연결을 끊을 때 정중 한 작업을 수행하지 않아야합니다.

우리는 (1) 범인을 찾거나 (2) 우리 코드를 도구로 사용하여 작업이 종료되기 전에 실제로 연결을 끊을 수있는 아이디어가 있습니까?

  • 레일
  • Resque 1.25.2
  • mysql2 보석 0.3.16
+0

pg gem v0.18.4를 사용하여 Rails 4.2.6 응용 프로그램에서 같은 문제가 발생하는 것을 확인하십시오. – Ben

답변

1

가 분기하기 전에 당신의 Resque 프로세스가 데이터베이스에서 분리되어 있는지 확인하고 다시 설정하는 연결을 나중에 4.0.x의 . 내가 Resque에 포기하고 Sidekiq로 이동

Resque.before_fork do 
    defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! 
end 

Resque.after_fork do 
    defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 
end 
+0

그것이 우리가 시도한 첫 번째 것입니다. 별로 도움이되지 않는다는 걸 압니다, 미안 해요. –

0

: 이니셜 라이저 파일이 들어 config/initializers/resque.rb 을 만듭니다. 나는 지금 훨씬 행복해.