ホームページ  >  記事  >  データベース  >  Redis がブロックされる原因の詳細な説明

Redis がブロックされる原因の詳細な説明

尚
転載
2019-11-29 15:56:302915ブラウズ

Redis がブロックされる原因の詳細な説明

検出されたブロッキング

オンライン アプリケーション サービスが最初にこれを検出し、アプリケーション側に異常な統計を追加し、電子メールで警告できます。 、SMS、WeChat 。

ログ システムを使用して例外をカウントし、アラーム ロジックをトリガーする

Redis 監視システムを使用して、ブロックされている問題を検出し、アラームをトリガーします。推奨される CacheCloud システム。

内部的な理由

API またはデータ構造の不合理な使用

高同時実行シナリオの場合は、大きなオブジェクトのコマンドの実行を避けてください。そのアルゴリズムの複雑さは O(n)O(n) を超えています。

遅いクエリが見つかりました:slowlog get {n}

大きなオブジェクトが見つかりました: redis-cli -h{ip} -p{port} bigkeys

CPU 飽和

CPU 飽和とは、シングルコア CPU を 100% まで実行している Redis を指します。

先頭のコマンドは、redis プロセスの CPU 使用率をチェックします。

redis-cli -h{ip} -p{port} –stat は、現在の Redis 使用量を取得し、同時実行数が到達したかどうかを判断します。制限

info commandstats 分析コマンドは不当な時間を消費し、過度のメモリ最適化が行われる可能性があります

#永続性ブロック

1. フォーク ブロック

RDB で発生するか、AOF が書き換えられると、Redis メインスレッドは fork を呼び出して子プロセスを生成し、永続ファイルの書き換えを完了します。

info stats コマンドを使用して、最新の fork 操作が行われたことを示す lastest_fork_usec インジケーターを取得します。 redis の処理に時間がかかりました

2. AOF によるディスク ブラッシングのブロック

AOF を有効にすると、ファイル ディスクのフラッシュは通常 1 秒に 1 回行われます。ハードディスクの圧力が高すぎる場合、fsync は待機する必要があります。書き込みを完了するには

#Redis ログまたは情報永続統計の aof_layed_fsync インジケーターを確認してください

iotop を使用できる場合、どのプロセスがハードディスク リソースを大量に消費する可能性がありますか?

3. HugePage 書き込み操作のブロック

透過的 HugePages を有効にするオペレーティング システムの場合、各書き込みコマンドにより、メモリ ページ ユニットを 4KB から 2MB にコピーすると、書き込み操作の実行時間が遅くなり、書き込み操作が遅くなります。多数の書き込み操作でクエリの速度が低下するため

外部理由

CPU 競合

1. プロセスの競合: redis は典型的な CPU 集中型アプリケーションです。 top および sar コマンドを使用して、CPU 消費の時点とプロセスを特定します

2. CPU のバインド: 一般的な最適化は、redis プロセスを CPU にバインドすることで、CPU コンテキスト切り替えのオーバーヘッドを削減します。 CPU がバインドされている場合、親プロセスと子プロセスの間で激しい CPU 競合が発生し、redis の安定性に大きな影響を与えます。

メモリ スワップ

オペレーティング システムが Redis が使用するメモリをハード ディスクにスワップアウトすると、スワップ後の Redis のパフォーマンスが急激に低下します。

redis メモリ交換を特定するための確認方法:

1. Redis プロセス番号を問い合わせ

redis-cli info server | grep process_id

2. プロセス番号に基づいてメモリ交換情報を問い合わせ

cat /proc/{process_id}/smaps | grep Swap

If 交換ボリュームがすべて 0KB または 4KB になる場合がありますが、これは正常です。

メモリ交換の防止:

1. マシンに十分な使用可能なメモリがあることを確認します

2. Redis を防止するために、すべての Redis サンプルで使用可能な最大メモリ (maxmemory) が設定されていることを確認します。極端な状況下でのメモリの増加 制御不能な増加

3. システムのスワップ優先度を下げる (echo 10>/proc/sys/vm/swappiness

ネットワークの問題

) 1. 接続の拒否

ネットワークの中断: 通常、ネットワークのカットオーバーまたは帯域幅の枯渇の場合

Redis 接続の拒否:

接続数に達した場合に新しい接続を拒否します。 maxclients よりも大きいです。 接続が入力されると、情報統計の拒否接続インジケーターが表示されます。

クライアントが redis にアクセスするときは、NIO の長い接続または接続プールを使用してください。

redis は、大規模な接続が必要なシナリオで使用されます。アクセスされる分散ノードの数が多く、ライフサイクルが短い (Map/Reduce など) ため、redis が無効な接続をアクティブにチェックして閉じることができるように tcp-keepalive および timeout パラメーターを設定することをお勧めします。

接続オーバーフロー:

プロセス制限: プロセスが開くことができるファイルの最大数は制御されます。ulimit -n、通常は 1024、接続数が多い Redis ではこの値を増やす必要があります

バックログ キューオーバーフロー: システムはバックログ キューを使用して特定のポート上の TCP 接続を保存します。redis のデフォルトは 511、システム バックログのデフォルトは 128、cron はオンラインで使用できます。定期的に netstat -s | grep overflowedstatistics

2 を実行してください。 . ネットワーク遅延

マシン間のネットワーク遅延を測定します

redis-cli -h{ip} -p{port} –latency
redis-cli -h{ip} -p{port} –latency-history 默认15秒完成一行统计,-i控制采样时间
redis-cli -h{ip} -p{port} –latency-dist 统计图展示,每1秒采样一次

3. ネットワーク カード ソフト割り込み

Single ネットワーク カード キューは 1 つの CPU のみを使用できます。高い同時実行性では、ネットワークカードデータのやり取りが同じ CPU に集中するため、マルチコア CPU を十分に活用できない状況が発生します。

一般に、ネットワーク トラフィック スループットが高いシナリオで発生します。

Redis の詳細については、

redis 入門チュートリアル

列に注目してください。

以上がRedis がブロックされる原因の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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