2013-04-02 2 views
0

위해 나는 레일 연결 풀 크기에 WEBrick

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5 seconds (waited 5.000798 seconds). The max pool size is currently 1; consider increasing it.) 

나는 풀 크기 1에 WEBrick (레일 서버)를 실행하려고

을 받고하지하고, 높은 풀 크기에 문제.

첫 번째 연결을 사용하는 WEBrick은 무엇이며 단일 스레드 응용 프로그램에 가장 적합한 풀 크기는 무엇입니까? 이것이 WEBrick 관련 문제입니까, 아니면 Unicorn과 같은 다른 서버에도 적용됩니까?

레일 버전은 3.2.13

업데이트입니다. 유니콘으로 이것을 확인한 결과, 단일 연결로 잘 작동합니다.

+0

프로덕션 환경에서 WEBrick을 사용하려고합니까? – Catfish

+0

확실히 두 번째 질문의 이유는 아닙니다. – UncleGene

답변

2

올바르게 기억한다면 레일스는 부팅 할 때 데이터베이스 연결을 예약하고 연결 풀에서 사용할 수있는 나머지 연결을 사용하여 요청을 처리합니다. 요청이 지속되는 동안 ActiveRecord 객체를 절대 건드리지 않더라도 Rails는 각 요청에 대해 풀에서 하나의 연결을 예약하려고 시도하거나 제한 시간까지 사용할 수있을 때까지 차단합니다.

기본 풀 크기는 5 개의 연결입니다. 1 개는 요청에 대해 Rails + 4 용으로 예약되어 있습니다.

레일즈는 응용 프로그램에서 스레드 안전을 유지하기 위해이 작업을 수행합니다.

응용 프로그램이 단일 스레드이고 동시성을 고려하지 않고 한 번에 하나의 요청 만 처리하는 경우 풀의 연결 수가 절대 최소값 2로 설정되어야합니다. 나는 여전히 5의 기본값을 권장 할 것이기 때문에 요청마다 하나 이상의 연결을 사용해야하는 경우를 대비하여 호흡 실을 확보해야합니다.

이것은 WEBrick과 관련이 없습니다. 연결 풀 제한은 실행중인 응용 프로그램 서버와 상관없이 응용 프로그램에 동일한 영향을줍니다.

+0

나는 너가 옳지 않다는 것을 확신한다. 콘솔/테스트는 단일 연결로 성공적으로 실행되며, 유니콘도 괜찮음을 확인했습니다. – UncleGene