Erlang Riak连接池静默断开

Erlang Riak连接池静默断开,erlang,database-connection,riak,Erlang,Database Connection,Riak,我在生产中遇到了严重的问题。我们与官方的erlang pb客户端建立连接池。一切正常。为了组织游泳池,我们使用了hottub(我们尝试了几个,但这是最简单的)。每个连接在3-5分钟内至少使用一次(现在生产尚未满负荷) 几天后riak服务器断开了我们的连接。但套接字进程不会死,它会在任何请求上回答{error,disconnected}。到目前为止,我编写了池工作者检查器,如果它已连接(Pid)返回not true,我们将杀死工作者并创建新的池工作者。我每十分钟开一次。但这没用。它返回true,但

我在生产中遇到了严重的问题。我们与官方的erlang pb客户端建立连接池。一切正常。为了组织游泳池,我们使用了hottub(我们尝试了几个,但这是最简单的)。每个连接在3-5分钟内至少使用一次(现在生产尚未满负荷)

几天后riak服务器断开了我们的连接。但套接字进程不会死,它会在任何请求上回答
{error,disconnected}
。到目前为止,我编写了池工作者检查器,如果它
已连接(Pid)
返回not true,我们将杀死工作者并创建新的池工作者。我每十分钟开一次。但这没用。它返回true,但我正在请求获取
{error,disconnected}
。到目前为止唯一有效的解决方案是,如果某个工作进程返回
{error,disconnected}
,则池满重新初始化。这是非常野蛮的,可能会使整个应用程序崩溃

在检查服务器日志时,我发现了许多类似以下两个错误:

2012-09-20 00:10:10.976 [error] <0.803.0>@riak_core_vnode:handle_info:510 296867520082839655260123481645494988367611297792 riak_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]}}
2012-09-20 00:10:10.976[错误]@riak_core_vnode:handle_info:510 2968675200828396552612601234816494988367611297792 riak_kv_vnode工作池崩溃{超时,{genu server,call,[,{work work,{fold,{Fun,{Fun},{raw,59205031,}}
2012-09-20 00:10:10.976[错误]@riak_core_vnode:handle_info:510 3653754093327257295509212081790754913983135744 riak_kv_vnode工作池崩溃{超时,{gen fsm,sync_send_事件,[,{签出,false,5000},5000]}
我想这才是真正的问题,但我认为客户端连接至少应该记录一些东西,获取连接问题失败列表,否则就会死掉。我得到的是连接(Pid)=真


您如何组织全天候工作的连接池?如何检查池工作程序或刷新它们?

保持对连接池的监督,如果连接发生{error,disconnected}或其他问题,则让连接终止。若套接字进程由于某种原因并没有随之停止,那个么您也可以手动停止它

至于我,我过去常常做这样的事情