不適切なパラメータの要約によって引き起こさJedis問題

不適切なダボサービススレッドプールによって引き起こさjedisパラメータが異常排出されます

現象:ダボサービス個々のマシンの散発的な発生、あるいはクラスタ全体は、スレッドプールの問題の多くが排出されると報告しました。問題は比較的乱暴な取り扱いの始まりは、直接スレッド10倍の数が増加します。しかし、問題はまだ時折、一時的な解決策になることができ、サービスを再起動し、表示されます。その後、それは少し高い周波数の問題を発見した、我々は慎重に分析するための時間を取らなければなりませんでした。

誤って設定jedisパラメータ:実際的な理由のために。実際の問題を慎重に分析した後、各出現のための接続を取得するためにjedis異常な接続プールの多くがあった異例の始まりです。

redis.clients.jedis.exceptions.JedisConnection: Could not get a resource from the pool
...省略其他堆栈信息
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out
...省略其他堆栈信息

これらは、実際にはジッタによるタイムアウトRedisのノードの障害またはネットワークです。そして、jedis構成を見て、タイムアウトが 1000に設定されているmaxRedirectので、一度、2 Redisの接続の問題を、約3Sブロッキング要求になります。このサービスに割り当てられたQPSは、障害物が雪崩につながっ蓄積ダボ要求につながり、約200のスタンドアローンです。処理方法:短いタイムアウト、リダイレクトを削除するには、サービス要求に応じてヒューズアセンブリを増やすことを検討してください。

またjstack分析によって、我々はダボスレッドプールが使い果たされたら、ダボ処理多数のスレッドがWAITING(パーキング)状態になっている問題を発見し、接続カトンでのRedisを取得します。関連するコード分析が接続管理をjedis、jedisはReentrantReadWriteLock接続プール管理を使用し、接続を競うためのアクセスは、ロックリソースを含み、そしてRedisのサーバーノードが接続プールにリードを接続することはできません新しい接続を作成しようとする必要があり、このプロセスは、書き込みロックがかかり、他のニーズにつながります読み込みロック介して接続された待機中のスレッドに入ります。だから、
また、QPS設定する必要がmaxTotalを(問題のこのセットは、接続の数は、実際に10あるjedis!)。

jedis RedisのRedisの原因サービスグリッチを用いたスパークアクセスサービス

私たちは、Redisのクラスタクラスタノードの数十で、クラスタの圧力の読み取りと書き込みがかなり大きく、比較的大規模なクラスタで使用します。そのうちのいくつかは、読み取りおよび書き込み操作は、他のサービスのメンテナンスから同僚をスパーク、jedisアクセスを使用します。

現象:Redisの応答時間を見つけることが表示されますグリッチ定期的に
DBA調査は、他のノードにRedisのクラスタノードの相対的な負荷が比較的高く、クラスタスロットコマンドの多数発見しました。

分析:;、jedis取得失敗は、renewSlotCacheを実行する場合、接続プールを接続jedis源は、各初期接続が作成され、クラスタ・スロットが最初のノードからクラスタ全体のRedisのクラスタ・トポロジを取得するためのコマンドを実行しようとし始めれるjedis renewClotCacheはまた、クラスタスロットコマンドを実行します。
推論と分析した後、問題が使用jedisのモードバッチ処理が出ている完全に破壊され、そのタスクの実行のプロセスを繰り返しスパーク初期化を実行します、新しい接続jedisを作成し、スパーク各バッチタスクをスパークにある接続プールをjedisさらに、クラスタスロット実行コマンド、コマンドは、DBAクラスタスロットから学習することができるリソースの最初のノードの比較的高い負荷をもたらす、かかる(jedis固定接続文字列、最初のノードは、常に、コマンドクラスタスロットを実行します) 。

プロセス:常に固定され、第1ノードクラスタスロットを回避するために、順次壊れjedisによって接続されたノードのシーケンスを実行するために使用されます。このメソッドの実装後は、バリが本当に消えました。

質問:上記の方法は、ノードRedisの負荷不均衡の問題を緩和するだけで言うことができますが、原因スパークの使用にはわからないが、私は複数のバッチタスク間jedisの接続を共有する方法があるかどうかわかりません。

おすすめ

転載: www.cnblogs.com/liqipeng/p/11669337.html