はじめに (対象読者・この記事でわかること)

この記事は、Linuxシステムの監視・運用に携わるシステム管理者やインフラエンジニアを対象にしています。特に、システムパフォーマンス監視の実務経験がある方を想定しています。

この記事を読むことで、マルチコア環境でsarコマンドを使用した際にCPU利用率が100%を超える現象の正しい原因を理解できます。また、CPU利用率を正しく解釈する方法や、問題を回避するための設定方法について具体的な知識を習得できます。これにより、システムのパフォーマンスを適切に評価し、不要なアラートや誤った判断を避けることができるようになります。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Linuxの基本的なコマンド操作 - システム監視の基本的な知識 - sarコマンドの基本的な使い方

マルチコア環境におけるCPU監視の重要性

現代のサーバー環境では、マルチコアCPUが標準となっています。4コア、8コア、さらには16コア以上のCPUを搭載したサーバーも珍しくありません。このような環境では、システム全体の負荷を正確に把握することが重要です。

sar(System Activity Reporter)は、Linuxシステムのリソース使用状況を監視するための強力なツールです。特にsysstatパッケージに含まれるsarコマンドは、過去のシステムパフォーマンスデータを分析する際に広く利用されています。

しかし、マルチコア環境でsarコマンドを使用すると、CPU利用率が100%を超える値を表示することがあります。これは一見するとシステムが過負荷状態にあるかのように見えますが、実際には正常な動作である場合があります。この現象を正しく理解し、適切に対応することが重要です。

マルチコア環境でのsarコマンドとCPU利用率の正しい見方

ステップ1:sarコマンドの基本とCPU利用率の表示方法

まず、基本的なsarコマンドの使い方から確認しましょう。CPU利用率を表示するには、以下のコマンドを使用します。

Bash
sar -u 1 5

このコマンドは、1秒間隔で5回CPU利用率を表示します。出力例は以下のようになります。

Linux 5.4.0-91-generic (server01)    01/01/2025      _x86_64_        (4 CPU)

01:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:00:02 PM     all      15.32      0.00      5.10      0.00      0.00     79.58
01:00:03 PM     all      22.45      0.00      7.14      0.00      0.00     70.41
01:00:04 PM     all      18.37      0.00      6.12      0.00      0.00     75.51
01:00:05 PM     all      25.51      0.00      8.16      0.00      0.00     66.33
01:00:06 PM     all      20.41      0.00      6.12      0.00      0.00     73.47
Average:        all      20.41      0.00      6.53      0.00      0.00     73.06

ここで重要なのは、%idleがCPUのアイドル時間を示す指標であり、100%から他の項目の合計値を引いた値がCPUの利用率を表すという点です。

ステップ2:マルチコア環境でのCPU利用率表示の仕組み

マルチコア環境では、sarコマンドは各CPUの利用率を個別に表示します。以下のコマンドで各CPUの利用率を確認できます。

Bash
sar -P ALL 1 5

出力例は以下のようになります。

Linux 5.4.0-91-generic (server01)    01/01/2025      _x86_64_        (4 CPU)

01:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:00:02 PM       0      18.37      0.00      6.12      0.00      0.00     75.51
01:00:02 PM       1      15.31      0.00      4.08      0.00      0.00     80.61
01:00:02 PM       2      12.24      0.00      5.10      0.00      0.00     82.65
01:00:02 PM       3      20.41      0.00      6.12      0.00      0.00     73.47
01:00:03 PM       0      22.45      0.00      7.14      0.00      0.00     70.41
01:00:03 PM       1      18.37      0.00      5.10      0.00      0.00     76.53
01:00:03 PM       2      15.31      0.00      6.12      0.00      0.00     78.57
01:00:03 PM       3      25.51      0.00      8.16      0.00      0.00     66.33
...
Average:          0      20.41      0.00      6.53      0.00      0.00     73.06
Average:          1      18.37      0.00      5.61      0.00      0.00     76.02
Average:          2      16.33      0.00      5.61      0.00      0.00     78.06
Average:          3      22.45      0.00      7.14      0.00      0.00     70.41

このように、各CPUコアの利用率が個別に表示されます。ここで注目すべきは、allの行が各CPUコアの平均値を示している点です。

ステップ3:CPU利用率が100%を超える現象の原因

マルチコア環境でsarコマンドがCPU利用率を100%を超える値を表示する原因は、計算方法にあります。特に、%stealという項目が関係しています。

%stealは、仮想化環境で、仮想CPUが実際のCPUリソースを使用できなかった時間の割合を示します。これは、ホストシステムが他の仮想マシンにCPUリソースを割り当てたために、対象の仮想マシンがCPUリソースを使用できなかった時間を表します。

例えば、4コアのシステムで、以下のような状況を考えてみましょう。

  • CPU0: 100%使用
  • CPU1: 100%使用
  • CPU2: 100%使用
  • CPU3: 50%使用、50% steal

この場合、システム全体のCPU利用率は(100+100+100+50)/4 = 87.5%ですが、steal時間が50%含まれているため、実際のCPU利用率は(100+100+100+0)/4 = 75%です。しかし、sarコマンドはこれを「100% + 50% = 150%」のように表示することがあります。

これは、各CPUコアの利用率を単純に合計し、CPUコア数で割るのではなく、各項目を個別に計算しているためです。特に、%stealが高い場合にこの現象が顕著になります。

ステップ4:正しいCPU利用率の見方

マルチコア環境でCPU利用率を正しく評価するためには、以下の点に注意する必要があります。

  1. 各CPUコアの利用率を個別に確認する sar -P ALLコマンドを使用して、各CPUコアの個別の利用率を確認します。これにより、どのコアに負荷が集中しているかを把握できます。

  2. %stealの値に注意する 仮想化環境では、%stealの値がCPU利用率の評価に影響します。%stealが高い場合は、ホストシステムのリソース不足が原因である可能性があります。

  3. システム全体の利用率はallの行を参照する システム全体の利用率は、allの行を参照します。これは各CPUコアの平均値を示しています。

  4. 100%を超える値は正常な場合がある 特に%stealが高い場合、CPU利用率が100%を超える値が表示されることがあります。これは必ずしもシステムの異常を示すものではありません。

ステップ5:監視設定の見直し

CPU利用率を監視する際は、以下の点を考慮して監視設定を見直すと良いでしょう。

  1. 閾値の設定 CPU利用率の閾値を設定する際は、%stealの値も考慮に入れる必要があります。例えば、CPU利用率が80%を超えても、%stealが20%以下であれば、実際のCPU利用率は60%以下である可能性があります。

  2. 複数の指標を組み合わせて監視する CPU利用率だけでなく、ロードアベレージやメモリ使用率、ディスクI/Oなどの他の指標も組み合わせて監視することで、システムの状態をより正確に把握できます。

  3. グラフ化して傾向を把握する CPU利用率の値を時系列でグラフ化することで、単一の値だけでなく、時間の経過に伴う変化傾向を把握できます。これにより、一時的なピークと持続的な負荷を区別できます。

ハマった点やエラー解決

誤ったアラート設定による不必要な通知

あるケースでは、システム管理者がCPU利用率の閾値を90%に設定していました。しかし、マルチコア環境では、一部のCPUコアが高負荷になると、システム全体のCPU利用率が90%を超えることがありました。これにより、実際にはシステムに問題がなかったにもかかわらず、頻繁にアラートが発生していました。

解決策として、各CPUコアの利用率を個別に監視し、複数のコアで同時に高負荷が発生した場合のみアラートを出すように設定を変更しました。これにより、不要なアラートが大幅に減少しました。

仮想化環境での誤解

別のケースでは、クラウド上の仮想マシンでCPU利用率が100%を超える値が頻繁に表示されていました。当初はアプリケーションのパフォーマンス問題が原因かと考え、チューニングを試みましたが、改善しませんでした。

調査の結果、%stealの値が高いことが原因であることが判明しました。ホストシステムのリソース不足が原因で、仮想マシンがCPUリソースを十分に確保できていない状態でした。解決策として、インスタンスのスペックをアップグレードすることで、問題は解決しました。

過去データの誤解

過去のシステムパフォーマンスデータを分析していた際に、特定の時間帯にCPU利用率が100%を超える値が記録されていることに気づきました。当時システムに問題があったのかと懸念しましたが、実際には正常な動作でした。

原因は、sarコマンドがCPU利用率を計算する際の方法にありました。当時はマルチコア環境でのCPU利用率の計算方法を十分に理解していなかったため、100%を超える値をシステムの異常と誤解していました。この経験から、マルチコア環境での監視データの解釈方法を学び、以降は正確に評価できるようになりました。

まとめ

本記事では、マルチコア環境でsarコマンドを使用した際にCPU利用率が100%を超える現象について解説しました。この現象は、マルチコア環境でのCPU利用率の計算方法に起因するものであり、必ずしもシステムの異常を示すものではありません。

正しいCPU利用率の評価には、各CPUコアの利用率を個別に確認し、%stealの値にも注意する必要があります。また、単一の指標だけでなく、複数の指標を組み合わせて監視することで、システムの状態をより正確に把握できます。

この記事を通して、読者はマルチコア環境でのシステム監視の知識を深め、誤った判断を避けることができるようになったことでしょう。今後は、より高度な監視手法や、他の監視ツールとの連携についても記事にする予定です。

参考資料