ホームページ  >  記事  >  データベース  >  Redis における AOF の潜在的な障害点について話しましょう (概要)

Redis における AOF の潜在的な障害点について話しましょう (概要)

青灯夜游
青灯夜游転載
2021-12-24 10:05:471775ブラウズ

AOF の潜在的な障害点は何ですか?次の記事は、Redis における AOF の潜在的なブロックポイントをまとめたものです。

Redis における AOF の潜在的な障害点について話しましょう (概要)

AOF の潜在的なブロック ポイントは何ですか

1. Redis がフォーク子プロセスを使用して AOF ファイルを書き換える場合、潜在的なブロッキングのリスクがあります

1)、フォークの子プロセス

フォークの子プロセス、メインスレッドはフォークの瞬間に確実にブロックされます(フォークはすべてのメモリ データを子プロセスにコピーするのは 1 回限りではありません)。fork は、大量のメモリのコピーによって引き起こされる長期的なブロッキング問題を回避するために、オペレーティング システムによって提供されるコピー オン ライト メカニズムを使用します。データを子プロセスに一度に送信します。 [関連する推奨事項: Redis ビデオ チュートリアル]

ただし、フォーク子プロセスは、プロセスに必要なデータ構造をコピーする必要があります。そのうちの 1 つは、メモリ ページ テーブルのコピーです (仮想メモリと物理メモリ マッピング インデックス テーブル)、このコピー プロセスは大量の CPU リソースを消費します。コピーが完了する前にプロセス全体がブロックされます。ブロック時間はインスタンス全体のメモリ サイズによって異なります。 インスタンスが大きくなるほど、メモリ ページ テーブルも大きくなり、フォーク ブロック時間も長くなります

メモリページテーブルのコピーが完了すると、子プロセスと親プロセスは同じメモリアドレス空間を指すことになります。親プロセスと同じメモリ サイズを適用します。

父と息子のプロセスの記憶が本当に分離されるのはいつでしょうか?

「現実的なコピー」は、その名前が示すように、書き込みが発生したときに実際にメモリ内の実際のデータをコピーします。このプロセス中に、親プロセスもブロックされるリスクにさらされる可能性があります。これがシナリオです。以下に紹介します

2)、親プロセスは AOF 書き換え中に書き込みます。

フォーク子プロセスは、親プロセスのアドレス空間と同じメモリを指します。この時点で、子プロセスは AOF 書き換えを実行し、メモリ内のすべてのデータを AOF ファイルに書き込むことができます。

しかし、この時点では、親プロセスにはまだトラフィックが書き込まれています。親プロセスが既存のキーを操作する場合、この時点で、親プロセスは実際にキーに対応するメモリ データをコピーし、このようにして、父プロセスと息子プロセスのメモリ データは徐々に分離され始め、父プロセスと息子プロセスは徐々に独自の独立したメモリ空間を持ちます。メモリ割り当てはページ単位で割り当てられるため、デフォルトは4kですが、このとき親プロセスがbigkeyを操作している場合、大きなメモリブロックの再適用に時間がかかり、ブロックされる危険性があります。

さらに、オペレーティング システムが ヒュージ ページ メモリ メカニズム (ヒュージ ページ、ページ サイズ 2M) を有効にすると、親プロセスがメモリを適用するときにブロックされる可能性が大幅に高くなります。増加するため、Redis マシンでは Huge Page メカニズムをオフにする必要があります。 RDB または AOF 書き換えを生成するための Redis フォークが完了するたびに、親プロセスが再適用したメモリ領域の量を Redis ログで確認できます。

3) AOF リライトが AOF 自身のログを再利用しないのはなぜですか?

AOF リライトは AOF 自身のログを再利用しません:

  • 理由の 1 つは、親プロセスと子プロセスの間で同じファイルを書き込むと必ず競合の問題が発生するためです。競合を制御するということは、親プロセスのパフォーマンスに影響を与えることを意味します。

  • 2 つ目は、AOF 書き換えプロセスが失敗すると、元の AOF ファイルが汚染されているのと同じになり、復元して使用できなくなることです。したがって、Redis AOF は新しいファイルを書き換えます。書き換えに失敗した場合は、ファイルを直接削除するだけで、元の AOF ファイルには影響しません。書き換えが完了したら、古いファイルを置き換えるだけです。

プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !

以上がRedis における AOF の潜在的な障害点について話しましょう (概要)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。