我在生产中遇到了令人讨厌的问题。我们与官方erlang pb客户端建立连接池。一切正常。为了组织池我们使用hottub(我们尝试了几个,但这是最简单的)。每个连接在3-5分钟内至少使用一次(生产现在未满载)。Riak连接池沉默断开
几天后,riak服务器断开连接。但是套接字进程并不会死亡,只要它回答了{error, disconnected}
。到目前为止,我写了泳池工人检查员,如果is_connected(Pid)
不是真的,我们杀了工人和泳池创建新的。我每十分钟就解雇一次。但它没有帮助。它返回true,但然后我要求我得到{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
你是如何组织24/7连接的连接池?你如何检查泳池工作人员或刷新他们?