6.11. 高メモリー使用率のトラブルシューティング
以下のシナリオでは、メモリー使用率が高くなる可能性があります。
-
pmproxy
プロセスは新しい PCP アーカイブの処理がビジーで、Redis の要求および応答を処理するための予備の CPU サイクルがありません。 - Redis ノードまたはクラスターが過負荷になり、時間が経過しても着信要求を処理できません。
pmproxy
サービスデーモンは、Redis ストリームを使用し、設定パラメーター (PCP チューニングパラメーター) をサポートします。これは、Redis のメモリー使用量および鍵の保存に影響します。/etc/pcp/pmproxy/pmproxy.conf
ファイルには、pmproxy
で利用可能な設定オプションと、関連する API がリスト表示されます。
次の手順では、メモリー使用率が高い問題をトラブルシューティングする方法を説明します。
前提条件
pcp-pmda-redis
パッケージをインストールします。# yum install pcp-pmda-redis
redis PMDA をインストールします。
# cd /var/lib/pcp/pmdas/redis && ./Install
手順
高いメモリー使用率のトラブルシューティングを行うには、次のコマンドを実行して、
inflight
列を確認します。$ pmrep :pmproxy backlog inflight reqs/s resp/s wait req err resp err changed throttled byte count count/s count/s s/s count/s count/s count/s count/s 14:59:08 0 0 N/A N/A N/A N/A N/A N/A N/A 14:59:09 0 0 2268.9 2268.9 28 0 0 2.0 4.0 14:59:10 0 0 0.0 0.0 0 0 0 0.0 0.0 14:59:11 0 0 0.0 0.0 0 0 0 0.0 0.0
この列は、Redis リクエストが転送中である数を示しています。つまり、キューに入れられているか送信されており、現時点では応答は受信されていません。
数値が高い場合は、次のいずれかの状態を示します。
-
pmproxy
プロセスは新しい PCP アーカイブの処理がビジーで、Redis の要求および応答を処理するための予備の CPU サイクルがありません。 - Redis ノードまたはクラスターが過負荷になり、時間が経過しても着信要求を処理できません。
-
メモリー使用量が多い問題のトラブルシューティングを行うには、このファームの
pmlogger
プロセスの数を減らし、別の pmlogger ファームを追加します。統合型 (複数の pmlogger ファームの設定) を使用します。Redis ノードが長時間にわたって CPU を 100% 使用している場合は、パフォーマンスが向上しているホストに移動するか、代わりにクラスター化された Redis 設定を使用します。
pmproxy.redis.*
メトリックスを表示するには、次のコマンドを使用します。$ pminfo -ftd pmproxy.redis pmproxy.redis.responses.wait [wait time for responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: microsec value 546028367374 pmproxy.redis.responses.error [number of error responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: count value 1164 [...] pmproxy.redis.requests.inflight.bytes [bytes allocated for inflight requests] Data Type: 64-bit int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: byte value 0 pmproxy.redis.requests.inflight.total [inflight requests] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: count value 0 [...]
インフライトのリクエスト数を表示するには、
pmproxy.redis.requests.inflight.total
メトリックスとpmproxy.redis.requests.inflight.bytes
メトリックスを参照して、現在のすべてのインフライトの Redis リクエストで占有されているバイト数を表示します。通常、redis 要求キューは 0 ですが、大きな pmlogger ファームの使用量に基づいて構築できます。これによりスケーラビリティーが制限され、
pmproxy
クライアントのレイテンシーが高くなる可能性があります。pminfo
コマンドを実行すると、パフォーマンスメトリックスの詳細が表示されます。たとえば、redis.*
メトリックスを表示するには、次のコマンドを使用します。$ pminfo -ftd redis redis.redis_build_id [Build ID] Data Type: string InDom: 24.0 0x6000000 Semantics: discrete Units: count inst [0 or "localhost:6379"] value "87e335e57cffa755" redis.total_commands_processed [Total number of commands processed by the server] Data Type: 64-bit unsigned int InDom: 24.0 0x6000000 Semantics: counter Units: count inst [0 or "localhost:6379"] value 595627069 [...] redis.used_memory_peak [Peak memory consumed by Redis (in bytes)] Data Type: 32-bit unsigned int InDom: 24.0 0x6000000 Semantics: instant Units: count inst [0 or "localhost:6379"] value 572234920 [...]
ピークメモリー使用量を表示するには、
redis.used_memory_peak
メトリックスを参照してください。
関連情報
-
システム上の
pmdaredis(1)
、pmproxy(1)
、およびpminfo(1)
man ページ - PCP デプロイメントのアーキテクチャー