0

制作で厄介な問題が発生しました。公式のerlangpbクライアントとの接続プールを作成します。すべてが正常に動作します。プールを整理するには、ホットタブを使用します(いくつか試してみますが、最も簡単です)。各接続は、3〜5分に少なくとも1回使用されました(現在、本番環境は完全にロードされていません)。

数日後、riakサーバーは私たちを切断します。しかし、ソケットプロセスは死ぬことはなく、どんな要求でも答えます{error, disconnected}。これまで私はプールワーカーチェッカーを作成しましたが、それis_connected(Pid)が真でない場合は、ワーカーを強制終了し、プールで新しいチェッカーを作成します。私は10分ごとにそれを発射しました。しかし、それは役に立ちませんでした。それはtrueを返しますが、それから私は私が得る要求をしています{error, disconnected}。これまでに機能する唯一の解決策は、一部のワーカーが戻った場合にプールを完全に再初期化すること{error, disconnected}です。それは非常に野蛮であり、アプリ全体をクラッシュさせる可能性があります。

サーバーログを確認したところ、次の2つのようなエラーが多数見つかりました。

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]}}

これは本当の問題だと思いますが、クライアント接続は少なくとも何かをログに記録するか、接続の問題の失敗リストを取得するか、終了する必要があると思います。is_connected(Pid)=trueを取得しました

24時間年中無休で機能する接続プールをどのように編成していますか?プールワーカーをチェックしたり、更新したりするにはどうすればよいですか?

4

1 に答える 1

0

接続プールを監視しておき、接続が {error, disconnected} になった場合や何か問題が発生した場合は、接続を停止させます。何らかの理由でソケットプロセスがダウンしない場合は、手動で停止することもできます。

に関して言えば、私はプールボーイを使ってこのようなことをしています。

于 2012-11-01T02:39:35.013 に答える