프로덕션 환경에서 문제가 발생했습니다. 우리는 공식 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를 가지고있다.
연중 무휴 작동하는 연결 풀을 어떻게 구성하고 있는가? 수영장 노동자를 어떻게 확인하거나 새로 고침합니까?