Redisユーザーからレポートを受け取りました。私はLinuxとそのスケジューラーの分野の専門家ではないため、何に返信すればよいかわかりませんが、(Redisプロジェクトとして)特にこの種の問題を把握する必要があります。将来的には、Redis Clusterと同様に、1つのボックスで同時に多数のRedisインスタンスを実行する予定です。だから私はここでいくつかの助けを求めています。
問題:
基本的に、大きなRedisインスタンスを再起動すると、システムが非常に遅くなり、シェルで入力できなくなります。 Redisがインスタンスをロードすると、CPUを100%使用し(データを可能な限り高速にロードし)、dump.rdbファイルを順番に読み取ります。負荷はI/Oバウンドではなく、CPUバウンドであるため、I/Oは特に高くありません。
いったいなぜ、2つのCPUと十分なRAMを備え、ディスク上でスワップされたものがないボックスが、基本的にこの作業負荷で動作を停止する必要があるのでしょうか。
これはEC2インスタンスであるという事実と大きく関係していると思います。これは、Redis 24 GBデータセットを問題なくボックスに常にロードするため、使用される仮想化テクノロジーに関連しています。 (高負荷で実行されているRedisの他のインスタンスでも)。
ヒントをありがとう!
サルヴァトーレ
編集:Twitterから受け取ったフィードバックを追加:
@ezmobiusから:@antirez最初に行うことは、/ mntまたはローカルのエフェメラルドライブから試して、EBSの不安定さを確認することです。次に、「最初の書き込みペナルティ」(google it)ではないことを確認します。最初にディスク全体で0をddする必要があります。
@dvirskyから:@antirezまさにそのようなec2ノードで多くのredisインスタンスを実行しています。 bgsaveの速度低下に気づきましたが、この現象は見られません。
'top'からの出力は、いくつかの手がかりを生み出す可能性があります。左上近くに「%stolen」というラベルの付いたフィールドがあり、同じ物理ボックス上の他のゲストに転送されたハードウェアCPUの量を反映しています。ハイパーバイザーが別のゲストにより多くのCPUを割り当てることを決定した場合、特に長時間実行されるCPUを集中的に使用するタスクを実行している場合は、このような速度低下が見られます。
それがあなたの問題かどうかはわかりませんが、確認する価値があります。
EC2インスタンスでも同じ問題が発生しました。おそらくRedisとは関係ありません-高いIOが発生している場合(たとえば、redisがダンプファイルをロードしている場合)に発生します。
アマゾンフォーラムでこのスレッドを見てください: https://forums.aws.Amazon.com/thread.jspa?messageID=215406
さまざまなカーネル/イメージを試しましたが、正常に動作するようになりました(古い2.6.21カーネルで)。
CPUスチールをチェックする必要があります(xx.x%st
cpu行の右側)top
は、100%の負荷とフリーズしたシェルが発生したときに表示されます。スティールは、実際のCPUサイクルのどれだけがハイパーバイザーによってマシンから盗まれ、別のマシンに渡されるかを表します。 CPUスティールは、仮想化環境にのみ関係します。マイクロインスタンスでその正確な問題が発生し、CPUを集中的に使用するタスクを実行すると、基本的にインスタンスが約1時間(タスクが終了するまで)使用できなくなりました。
このトピックの詳細については、 Greg's Ramblingsに関するこの投稿 を参照してください。ただし、Greg's Wordを使用する場合、これはマイクロインスタンスでのみ発生するはずです。