Redis の永続化プロセスは常に Redis のパフォーマンスに影響を与える共通の要素です。永続性を監視する方法と永続化プロセスを最適化する方法は?ここで見てみましょう。
フォークの監視と最適化
RDB 永続化または AOF 書き換えのどちらの永続化が使用されても、メイン プロセスはフォークアウトされます。 RDBファイルの生成やAOFの書き換えが完了した子プロセス。フォーク操作は、オペレーティング システムにとって比較的負荷の高い操作です。フォークフェーズ中、redis は一定期間ブロックされます。ブロック時間は、redis データが占有するメモリ サイズに直接比例し、1G メモリ フォークごとに 20 ミリ秒かかります。
フォーク ステージのブロック時間を知りたい場合は、info stats コマンドを使用して、latest_fork_usec オプションの値を表示できます。単位はマイクロ秒です。ミリ秒ではなくマイクロ秒であることに注意してください。
# redis-cli info stats | grep latest latest_fork_usec:323
フォークを最適化する方法:
Redis が占有するメモリ サイズを制御します。メモリ使用量が大きすぎる場合は、アプリケーションを分割して複数のサーバーにデプロイして、Redis のメモリ使用量を共有できます。
フォーク操作の頻度を適切に減らします。
メモリ監視
RDB 永続化ログは次のとおりです。
…… 21692:C 15 May 2020 14:17:06.935 * DB saved on disk 21692:C 15 May 2020 14:17:06.936 * RDB: 2 MB of memory used by copy-on-write ……
RDB 永続化プロセスは 2M メモリを消費します。
AOF 永続ログは次のとおりです。
…… 15786:C 23 May 2020 07:39:59.145 * AOF rewrite: 2MB of memory used by copy-on-write 10679:M 23 May 2020 07:39:59.201 * Background AOF rewrite terminated with success 10679:M 23 May 2020 07:39:59.201 * Residual parent diff successfully flushed to the rewritten AOF (0.02 MB) 10679:M 23 May 2020 07:39:59.201 * Background AOF rewrite finished successfully
aof の書き換えによって占有されているメモリが 2MB であることがわかります。0.02MB=2.02MB
永続化プロセス中のメモリ 占有ステータスについては、redis ログ内の関連情報をカウントするシェル スクリプトを作成できます。
ハードディスク監視
Redis 永続化プロセスは、永続化後にメモリ データが保存されるため、ハードディスクに負荷をかけます。ハードディスクです。
Linux システムには、ハードディスクを監視するための sar、iostat などのコマンドがあり、ハードディスクの IO プレッシャーがしきい値を超えていることが判明した場合は、redis ログに従って持続時間を比較して、これは、redis 永続化の圧力によって引き起こされます。
最適化方法 ここでは 2 つのポイントがあります:
パフォーマンスの良いディスクを使用する 機械式ハード ドライブは、ソリッド ステート ドライブほど優れたものではありません。
複数の Redis インスタンスが 1 台のマシン上に構成されている場合、それらのインスタンスを異なるディスクに書き込むことで、ディスクへの書き込み負荷を軽減できます。
単一マシンのマルチインスタンスのデプロイメント
Redis はシングルスレッド アーキテクチャであるため、Redis が 1 つだけの場合インスタンスがサーバーにデプロイされている場合、マルチコア CPU は無駄になります。したがって、通常、複数の Redis アプリケーションが 1 つのサーバーにデプロイされます。たとえば、3 つの Redis サービスが開かれ、ポート番号は 6379、6380、および 6381 です。6379 はキャッシュ サービスに使用され、6380 はメッセージ キューに使用され、6381 はサービスに使用されます。タグや推奨システムに使用されます。
これは確かに CPU を最大限に活用できますが、問題が発生しやすい可能性があります。複数のインスタンスが同時に永続化されている場合、CPU、メモリ、ビデオへの負荷が非常に大きくなります。一度に 1 つのインスタンスのみが存続するようにそれらを分離することをお勧めします。
この効果を実現する疑似コードは次のとおりです:
while (true) { $redisObj = [6379,6380,……]; foreach ($redisObj as $obj) { // 该实例是否构成重写的要求 if (rewriteConf($ojb)) { // 该实例进行持久化 } } }
foreach を使用して各 Redis インスタンスを走査し、インスタンスが書き換えの条件を満たしているかどうかを判断します。書き換えが始まります。このようにして、複数の Redis インスタンスを永続化して分離できます。
以上がRedis 永続化プロセスの監視と最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。