2012-10-05 3 views
0

프로덕션 환경에서 문제가 발생했습니다. 우리는 공식 erlang pb 클라이언트와 연결 풀을 만듭니다. 모든 것이 잘 작동합니다. 수영장을 조직하기 위해 우리는 hottub을 사용합니다 (우리는 여러 번 시도하지만 가장 간단합니다). 각 연결은 3-5 분에 한 번 이상 사용되었습니다 (현재 프로덕션에 완전로드되지 않음).Riak 연결 풀 자동 연결 끊음

며칠 후에 서버가 연결을 끊습니다. 하지만 소켓 프로세스가 죽지 않는다. 어떤 요청이라도 대답은 {error, disconnected}이다. 지금까지 우리는 수영장 노동자 체커를 썼습니다. is_connected(Pid)이 사실이 아니라면, 우리는 노동자를 죽이고 수영장을 만들어 새로운 것을 만듭니다. 나는 10 분마다 해고했다. 그러나 도움이되지 않았습니다. 그것은 사실로 돌아 오지만, 요청을하면 {error, disconnected}이됩니다. 일부 작업자가 {error, disconnected}을 반환하는 경우 지금까지 작동하는 솔루션 만 풀 리 초기화됩니다. 그것은 매우 야만적이며 전체 앱을 다운시킬 수 있습니다. 내가 서버 로그를 선택하면

나는이 두 가지처럼 많은 오류를 발견

2012-09-20 00:10:10.976 [error] <0.803.0>@riak_core_vnode:handle_info:510 29686752008283965526riak_kv_vnode worker pool crashed {timeout,{gen_server,call,[<0.819.0>,{work,<0.806.0>,{fold,#Fun<riak_kv_eleveldb_backend.3.96124638>,#Fun<riak_kv_vnode.14.47983300>},{raw,59205031,<0.28969.11>}}]}} 
2012-09-20 00:10:10.976 [error] <0.862.0>@riak_core_vnode:handle_info:510 365375409332725729550921208179070754913983135744 riak_kv_vnode worker pool crashed {timeout,{gen_fsm,sync_send_event,[<0.866.0>,{checkout,false,5000},5000]}} 

내가 그 진짜 문제입니다 생각,하지만 난 클라이언트 연결이 적어도 뭔가를 기록 연결 문제 오류 목록을 얻거나 사망한다고 생각합니다. 나는 is_connected (Pid) = true를 가지고있다.

연중 무휴 작동하는 연결 풀을 어떻게 구성하고 있는가? 수영장 노동자를 어떻게 확인하거나 새로 고침합니까?

답변

0

연결 풀을 감독하고 {오류, 연결이 끊어 지거나} 다른 오류가 발생하면 연결이 끊어 지도록하십시오. 어떤 이유로 든 소켓 프로세스가 어떤 이유로 든 작동을 멈추지 않으면 너무 수동으로 중지 할 수 있습니다.

나를 위해 나는 이런 것을하기 위해 poolboy을 사용합니다.