CPU使用率とは?初心者にもわかる基本概念とチェック方法

DevOps

はじめに

皆さんは、コンピューターの負荷が高くなると「CPU使用率が上がる」という話を耳にしたことがあるかもしれません。 特にプログラミング学習を始めたばかりだと、CPUという言葉自体は知っていても、その使用率の意味を深く考える機会は少ないのではないでしょうか。 しかし実際の開発や運用の現場では、CPU使用率の状態を把握することがとても重要です。

なぜなら、CPU使用率が適切な範囲に収まっているかどうかで、アプリケーションのパフォーマンスやサービスの安定性が大きく変わってくるからです。 もしCPU使用率が常に高いままであれば、プログラムの処理が遅延したり、最悪の場合にはサービスダウンの原因になったりすることもあります。 一方でCPU使用率が低ければ、リソースを十分に活用しきれていない可能性もあります。

この記事では、CPU使用率とは何かという基本的なところから、実際にどのように計測やチェックを行うのかまで、初心者の皆さんにもわかりやすく解説します。

この記事を読むとわかること

  • CPU使用率の基本的な意味
  • CPUがどのように処理を行うかのイメージ
  • 具体的な計測方法と代表的なコマンドの使い方
  • 実際の開発や運用でCPU使用率をどう活用するか

CPU使用率とは何か

CPUはコンピューターの中心的な処理装置ですが、ひとつのタスクだけを実行しているわけではありません。 実は、オペレーティングシステム(OS)の仕組みにより、数多くのタスクが短い時間ごとに切り替わりながらCPUを使っています。 この切り替えは素早いため、私たちから見ると複数のタスクが同時に処理されているように感じるのです。

CPU使用率は、そのCPUがどれだけの割合で何らかの処理を実行しているかを示す指標です。 たとえば、CPU使用率が50%であれば、CPUが「その測定期間内の半分の時間、何かしらの処理をしていた」という意味になります。 逆に言えば、残りの時間はアイドル(待機)状態だったということです。

初心者の皆さんが最初につまずきやすい点として、CPU使用率が高いのにプログラムの処理が速い場合もあれば、CPU使用率が低いのになぜか処理が重いように感じる場合もあるということが挙げられます。 これはCPU以外の要素、たとえばメモリやネットワーク、ディスクの速度などの影響を受けている可能性もあるからです。

CPU使用率の仕組み

CPUは一定のクロック周期で命令を実行しています。 OSはプロセスやスレッドを管理し、スケジューラと呼ばれる仕組みを使ってCPUの時間を分配しています。 具体的には、短い時間(タイムスライス)ごとにCPUの実行権がどのプロセスに割り当てられるかを決めているわけです。

もし大量のプロセスが同時に処理を要求していれば、CPUは全力で処理するため常に使用率が高い状態になります。 一方であまり処理が要求されていないときは、CPUが暇を持て余すため使用率は下がります。 この「使用率の変動」を観察することで、システムがどの程度負荷を受けているのかを知る手がかりになるわけです。

CPU使用率を詳細に見る場合には、ユーザーモード・カーネルモードといった区分に着目することもあります。 ユーザーモードのCPU使用率が高いということは、主にユーザープログラムの処理に時間が取られていると考えられます。 一方でカーネルモードが高い場合には、OS自体の処理やドライバなどに多くの処理リソースが割かれていることが考えられます。

CPU使用率を実務でどう活用するか

システム開発や運用の現場では、CPU使用率を把握することが大切です。 もしCPU使用率が著しく高ければ、プログラムが重い処理を繰り返していないかを疑う必要があります。 また、CPU使用率が高い原因がどこにあるかを突き止めるのも重要です。

具体的には、ある特定のプロセス(例としてWebサーバーやデータベース)がCPUの大半を占有している可能性があります。 そういったケースでは、プログラムのアルゴリズムを見直したり、並列処理に向かない箇所を最適化したりする必要があるかもしれません。

一方でCPU使用率が低すぎる場合にも注意が必要です。 せっかくの処理リソースが余っているのに、別のボトルネック(ディスクI/Oやネットワークなど)が原因でパフォーマンスが向上しない可能性があります。 開発や運用のシーンでは、CPUだけではなく総合的にリソースの使用状況を見ながら問題を特定していくのが一般的です。

CPU使用率の確認方法

では実際に、どのようにしてCPU使用率を確認すればよいのでしょうか。 OSが異なると使うツールも若干変わりますが、基本的な概念は共通しています。 ここでは代表的なコマンドや機能をいくつか紹介します。

top コマンド(Linux系)

Linux環境で広く利用されるtopコマンドは、CPU使用率だけでなく、メモリ使用状況や実行中のプロセスの情報などをリアルタイムに表示できます。 コマンドを入力すると画面が書き換わり、上部にシステム全体の負荷状況やCPU使用率、下部にはプロセス一覧が表示されます。

このtopコマンドで注目したいのは、行頭にあるユーザーモードやシステム(カーネルモード)などの区分です。 たとえばus(user)、sy(system)、id(idle)といった指標があり、CPUがどのモードでどれくらい使われているのかがひと目で分かります。

Task Manager(Windows)

Windowsの場合はタスクマネージャーが代表的です。 タスクマネージャーを起動すると、CPU使用率がグラフ化されて表示され、現在どのプロセスがどれだけCPUを消費しているかも一覧できます。 特に、アプリケーションごとのCPU使用率がすぐに確認できるため、どのプログラムが原因で負荷が高まっているかを把握しやすいです。

Activity Monitor(macOS)

macOSではアクティビティモニタが同様の機能を提供しています。 CPUタブを選択すると、プロセスごとのCPU使用率が確認でき、グラフとして総使用率も見ることができます。 直感的なUIでありながら、各プロセスの詳細な状況を素早く把握できるのが特徴です。

プログラミングからCPU使用率をチェックする例

プログラミングの学習を進めるうえで、CPU使用率をコードから読み取りたくなることもあるでしょう。 いくつか方法はありますが、ここではPythonを使ったシンプルな例を紹介します。 以下のサンプルでは、外部ライブラリのpsutilを用いて定期的にCPU使用率を取得しています。

import time
import psutil

def monitor_cpu(interval=1, duration=5):
    # interval: CPU使用率を取得する間隔(秒)
    # duration: 合計何回取得するかを決める回数
    for _ in range(duration):
        usage = psutil.cpu_percent(interval=interval)
        print(f"CPU使用率: {usage}%")

if __name__ == "__main__":
    monitor_cpu(interval=2, duration=3)

上記のようなコードを実行すると、指定した時間間隔でCPU使用率を測定し、コンソールに表示することが可能です。 Python以外の言語でも、類似の方法でCPU使用率を取得する仕組みが提供されていることが多いです。

CPU使用率の数値から何を読み取るか

CPU使用率はその数値自体が大事というよりも、**「現在の処理状態を知るための目安」**として活用されます。 数値が高いときは、何がCPUのリソースを食い尽くしているのかを確認しましょう。 数値が低いときは、ほかのリソースが詰まっていないか、あるいは想定どおりの動作になっているかを検討することが大切です。

以下のように、CPU使用率を多角的にチェックするとトラブルシューティングがしやすくなります。

状況考えられる原因対処の例
CPU高・メモリ高メモリ集約型の処理が並行で走っているメモリの最適化、拡張など
CPU高・ディスク高大量のI/O処理が同時に実行されているI/O処理の最適化
CPU高・他低計算量の多い処理が集中している可能性アルゴリズム改善など
CPU低・他高CPU以外のリソースがボトルネックになっているネットワークやI/O周りの検討

このように、CPU使用率は他のリソース使用率と合わせて見ることで、具体的にシステムがどの部分で負荷を感じているのかを把握しやすくなります。

CPU使用率を抑えるための対策

CPU使用率が常に高い場合、プログラムの処理が適切に最適化されていない可能性があります。 一般的な対策としては、以下のようなものがあります。

  1. アルゴリズムの見直し
  2. 並列化・非同期処理の導入
  3. キャッシュの有効活用
  4. CPU数の増設やクラウドリソースのスケールアップ

たとえば、どうしても単純計算を大量に行わなければならない場面があるのであれば、並列処理やマルチスレッドを使って複数のCPUコアを活用する方法を検討できます。 また、無駄な繰り返し処理を削減したり、一度計算した結果をキャッシュすることで、CPUのリソースを節約できるケースもあります。

CPU使用率が原因でレスポンスが遅いと思い込んでいても、実はメモリ不足やネットワーク遅延が問題だったということもあります。 思い込みで対応するのではなく、必ず他のリソース状況も合わせてチェックすることが大事です。

実務での活用シーンの具体例

CPU使用率の確認は、開発環境よりも本番環境での監視や運用で大いに役立ちます。 たとえばWebサーバーがある日突然レスポンス遅延を起こしたとき、まずCPU使用率やメモリ使用率をモニタリングして問題の切り分けを行います。 そこでCPU使用率が極端に高ければ、プログラムに無限ループのような処理が紛れ込んでいるかもしれませんし、負荷テストで想定した以上にアクセスが集中している可能性があります。

また、コンテナを使ったサービス運用では、ホストマシン全体のCPU負荷とコンテナごとのCPU負荷を比較することもあります。 もし特定のコンテナだけがCPUを大量に消費していれば、そのコンテナ内のアプリケーションの実装を再度確認しなければなりません。

このように、CPU使用率の情報は問題解決のスタート地点として活用できることが多いです。 さらに、長期的な視点で定期的にCPU使用率をモニタリングすれば、次のプロジェクトや機能追加でどれぐらいサーバーリソースを増強すべきかといった判断材料にもなります。

CPU使用率と開発効率

CPU使用率はプロダクトの品質だけでなく、開発者の作業効率にも影響を及ぼします。 たとえば、ビルド時間がやたら長い場合、CPU使用率が低くくすぶったまま処理が進んでいないケースがあります。 この場合、ほかにリソースを消費しているプロセスがあってビルドが順番待ちになっている、あるいは設定が非効率なためにCPUがうまく使われていないという可能性も考えられます。

逆にビルドやテストを並行して回しすぎてCPU使用率が100%近く張り付いてしまい、PC自体が操作しづらくなる状況も見受けられます。 このように、開発環境でもCPU使用率を意識すると無駄な待ち時間を減らしやすくなります。

開発中にビルドを高速化したい場合、ビルド時の並列ジョブ数を制御するオプションを試してみるのもひとつの方法です。 CPUコア数と並列数をうまく設定することで、ビルド時間の短縮が見込めるケースがあります。

まとめ

CPU使用率は、コンピューターの処理状況を数値化した指標として多くの場面で活用されています。 プログラミングやシステム運用の初心者の皆さんにとっては、まずCPU使用率が何を表しているのかをしっかり理解することが大切ではないでしょうか。

CPU使用率を高める原因には、計算量の多い処理だけでなく、OSのスケジューラやプロセス管理など複数の要因が絡みます。 逆に、CPU以外のリソースがボトルネックである場合にはCPU使用率が低くとも処理が遅くなる可能性があります。

したがって、CPU使用率はあくまでシステム全体の状態をチェックする入り口のひとつです。 他のリソース情報やログと組み合わせて正しく問題点を把握し、必要であれば最適化や負荷分散といった対応策を検討してみてください。

Shell Scriptをマスターしよう

この記事で学んだShell Scriptの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。