問題
APMとインフラストラクチャ間のCPU使用率データが矛盾しているように見える、またはCPU使用率が100%を超えている。
原因
APM用のCPU使用率データとインフラ用のCPU使用率データは異なります。
- APMでは、CPUパーセント使用率は、特定のサーバー上のアプリケーションまたはサービスのすべての インスタンス の使用率を集約して測定します。
- インフラストラクチャーでは、CPUの使用率は、 ホスト に関連して見る場合と、 プロセス に関連して見る場合とで、測定方法が異なります。
アプリのCPU使用率を見るには one.newrelic.com > (select an app) にアクセスし、ホストリストで CPU usage を確認します。インスタンスの数は各ホスト名の下に記載されています(例: 55 instances).
APMのCPUパーセント使用率は、指定されたサーバー上のアプリまたはサービスのすべてのインスタンスのCPU使用率を集約して測定します。このパーセンテージは、サーバー上のコアで実行されているインスタンスの数に影響されます。1台のサーバーで複数のインスタンスが動作している場合や、マルチコア環境では、CPU使用率が100%を大きく上回ることがあります。
APMでは、CPU時間を集計し、クロックタイムで割ることでパーセンテージを算出しています。
CPU usage = (instance CPU time + instance CPU time + [...]) / (clock time)
例クアッドコアプロセッサーへのアップグレード
同じアーキテクチャでデュアルプロセッサからクアッドプロセッサにアップグレードした場合、同じ負荷とアプリケーションであれば、ほぼ同じCPUの数値が表示されるはずです。New Relic が計算を正規化した場合、使用しているサイクル数が同じであっても、アップグレードによって CPU 使用率が急激に減少したように見えます。インスタンスを増やしても、コードの効率は上がりません。
個々のホストのCPU使用率を表示するには
one.newrelic.com > Infrastructure にアクセスすると、 CPU %.
ホストリストで個々のCPU使用率を確認できます。
CPU使用量の正確な計算は、CPU使用量を ホスト に関連して見ているのか、 プロセス に関連して見ているのかによって測定方法が異なります。
ページ
計算内容
Hosts ページでは、CPU Percent は
SystemSample
イベントの一部である派生メトリックです。CPU パーセンテージは New Relic が収集したものではなく、他のいくつかのメトリクスから派生したものです。具体的には、cpuPercent
属性は、cpuUserPercent
、cpuSystemPercent
、cpuIoWaitPercent
、cpuStealPercent
を集約したものです。ホスト ページでは、システム全体の観点からメトリクスを表示しています。たとえば、32個のコアがインストールされているサーバーで、
cpuPercent
が50%と表示されている場合、32個のコアのうち16個が使用されていることになります。プロセスページでは、CPUの使用率はホストではなく個別のプロセスに限定されます。このため、CPUの使用率のメトリックでは、システム全体のリソースは考慮されません。各プロセスが1つのCPUコアのうちどの程度を使用しているかが表示されます。
たとえば、32コアのサーバーで、
cpuPercent
が50%と表示されているプロセスは、シングルコアの半分、つまりサーバー全体で利用可能なCPUサイクルの約1.5625%しか利用していないことになります。この結果、 Processes ページで cpuPercent が 100% を超えることがあります。この場合、そのプロセスはシングルコア相当以上のCPUサイクルを要求していることになります。