自分で設計した ElastiCache for Redis クラスターの CPU 使用量の増加をトラブルシューティングする方法を教えてください。

所要時間2分
0

自分で設計した Amazon ElastiCache for Redis クラスターの CPU 使用量の増加をトラブルシューティングしたいと考えています。

簡単な説明

ElastiCache for Redis の Amazon CloudWatch CPU メトリクスは次のとおりです。

  • EngineCPUUtilization: Redis エンジンスレッドの CPU 使用率を報告します。Redis はシングルスレッドです。ベストプラクティスは、vCPU が 4 つ以上あるノードの EngineCPUUlization メトリクスを監視することです。
  • CPUUtilization: ホストの CPU 使用率を示します。vCPU が 2 つ以下の小規模ノードでは、CPUUtilization メトリクスを使用してクラスターワークロードを監視します。

解決策

エンジンの CPU 使用率が高い場合のトラブルシューティング

高 EngineCPUUtilization のトラブルシューティングには、次の点を確認してください。

  • CPU 時間を大量に消費する長時間実行コマンド: キーhkeyhgetall など、時間が複雑なコマンドは CPU 時間を大量に消費します。コマンドの時間の複雑さやパフォーマンスに関する推奨事項を確認するには、Redis Web サイトの「コマンド」を参照してください。Lua スクリプトを使用すると、ランタイムにすべてのサーバーアクティビティがブロックされ、EngineCPUUtilization が上昇します。Lua スクリプトは EVAL および EVALSHA Redis コマンドで使用されます。詳細については、Redis ウェブサイトの「LuaEVALEVALSHA によるスクリプティング」を参照してください。実行時間が長いコマンドや Lua スクリプトを確認するには、Redis SLOWLOG を使用してください。
  • 多数のリクエスト: コマンド統計情報を確認して、コマンドバーストまたは増加した待ち時間を特定します。コマンドの統計情報を確認するには、GetTypeCmdsHashBasedCmds などの CloudWatch メトリクスを使用します。または、Redis INFO コマンドを使用してください。詳細については、Redis ウェブサイトの INFO を参照してください。リクエストの数が多く、アプリケーションのワークロードが予想どおりであれば、クラスターをスケーリングしてください。
  • バックアップとレプリケーション: バックアップまたはレプリケーションが行われた場合は、SaveInProgress メトリクスを確認してください。このバイナリメトリクスは、バックグラウンド保存 (フォークまたはフォークレス) が進行中の場合は 1 を示し、バックグラウンド保存が進行中でない場合は 0 を示します。Redis スナップショットを作成するのに十分なメモリがあることを確認してください。
  • 多数の新規接続: 短期間に多数の新しいクライアント接続要求が発生すると、EngineCPUUlization が増加する可能性があります。多数の接続を処理する場合のベストプラクティスについては、「ベストプラクティス: Redis clients および Amazon ElastiCache for Redis」を参照してください。Redis 6.2 以降では、パフォーマンスの向上が実装されました。詳細については、「ElastiCache for Redis 6.2 (拡張版)」を参照してください。
  • キーエビクションの件数が多い: Redis は maxmemory-policy パラメーターに基づいてキーを削除します。エビクションは、キャッシュに新しいデータを保持するための十分なメモリがない場合に発生します。エビクションの量が多い場合、Redis はキーをエビクトするためにより多くの CPU リソースを使用し、EngineCPUUtilization が増加します。エビクションボリュームをモニタリングするには、CloudWatch メトリクスのエビクションを使用します。エビクション量が多い場合は、より大きなノードタイプを使用するか、ノードを追加してクラスターをスケーリングします
  • 再利用回数が多い: メモリを解放するために、Redis はタイムアウト期限に達したキーをサンプリングして削除します。このプロセスは再利用と呼ばれます。期限切れの数が多いと、CPUUtilizationEngineCPUUtilization が増加する可能性があります。キー有効期限イベントの数をモニタリングするには、CloudWatch メトリクス **Reclaimed を使用してください。**多くのキーが同時に期限切れにならないようにするのがベストプラクティスです。キーが別の時間枠で期限切れになるようにするには、EXPIREAT コマンドを使用するか、キーに異なる TTL 値を設定します。詳細については、Redis ウェブサイトの「EXPIREAT」を参照してください。

CPUUtiliation が高い場合のトラブルシューティング

高い CPUUtilization をトラブルシューティングするには、次の点を確認します。

  • 高いネットワークトラフィックまたは接続: ネットワークトラフィックまたは接続量が多いと、Amazon ElastiCache Redis の CPUUtilization が増加する可能性があります。ネットワークトラフィックまたは接続量が多いかどうかを確認するには、NewConnectionsNetworkBytesInNetworkBytesOutNetworkPacketsIn、および NetworkPacketsOut CloudWatch メトリクスを確認します。
  • 他のスレッドによって処理される非同期 I/O: サポートされているノードタイプでは、拡張 I/O は専用スレッドでネットワーク I/O を処理するように設計されています。また、Redis バージョン 6.2 以降では TLS オフロードがサポートされているため、ElastiCache for Redisは I/O スレッドで TLS 操作を実行できます。TLS 操作ではノードで使用可能な余分な CPU コアが使用されるため、この余分な CPU 使用率が **CPUUtilization の増加につながる可能性があります。**詳細については、「Amazon EC2 M5 および R5 インスタンスによる Amazon ElastiCache のパフォーマンスの向上」を参照してください。
  • 継続的な管理されたメンテナンスとサービスの更新: メンテナンスとサービスの更新には計算能力が必要であり、その結果 CPUUtilization が増加する可能性があります。必ずメンテナンスウィンドウをチェックして、CPUUtilization の増加が同時に発生するかどうかを確認します。メンテナンスウィンドウは使用率の低い時間帯に設定するのがベストプラクティスです。詳細については、「Amazon ElastiCache マネージドメンテナンスとサービスアップデートのヘルプページ」を参照してください。
  • 高度なページングと操作: ノードのメモリが不足すると、カーネルがメモリをページアウトしてスワップする可能性があります。このアクションはパフォーマンスの低下につながる可能性があります。ページングが多すぎると、CPUUtilization が増加する可能性があります。また、バックアップやスケーリングなどの操作を行うときにノードの負荷が高いと、CPUUtilization が上がる可能性があります。詳細については、「Amazon CloudWatch を使用した Amazon ElastiCache for Redis によるベストプラクティスのモニタリング」を参照してください。
AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ