このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】CPUやメモリの使用率の監視

CPUやメモリの使用率の監視

 システム管理の現場では、CPUやメモリが異常に高い状態で推移していないか、ディスク容量が上限に近づいていないかといった情報を定期的に把握する必要があります。これらのリソース使用率を可視化し、閾値を超えたらアラートを出すように設定すれば、システム障害の予防やボトルネックの早期発見に役立ちます。Pythonには、リソース使用状況を簡単に取得できる「psutil」というライブラリがあり、CPU・メモリ・ディスクなどの詳細情報をスクリプトで扱えるようになります。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.psutilの概要

 psutil(ピーエス・ユーティル)は、システムのプロセスやハードウェアリソースに関する統計情報を取得できる便利なライブラリです。CPUの使用率やメモリ状況、ディスク容量だけでなく、ネットワークやセンサーの情報にもアクセスすることができます。システム監視ツールの作成からリソース使用率の可視化まで、幅広い用途で活用されます。

インストール方法

 標準ライブラリではないため、あらかじめインストールしておく必要があります。インストール方法は以下のとおりです。Anaconda Navigatorでは、あらかじめインストールされています。

環境コマンド備考
CPython(通常のPython環境)pip install psutilpipの実行時に管理者権限が必要な場合もある。
Anaconda / Minicondaconda install -y psutilcondaの利用で依存関係を一括管理

 いずれかの方法でインストールを完了すれば、PythonスクリプトやJupyter Notebookなどからimport psutilで利用できるようになります。

2.CPUの使用率を取得する

 CPUはシステムパフォーマンスに直結する重要なリソースであり、どの程度使用されているかを随時把握しておくことが大切です。psutilでは、cpu_percent()関数を使って現在のCPU使用率を取得できます。

cpu_percent関数の特徴とオプション

  • 引数なしで呼び出す
    直前にcpu_percent()を呼び出してからの平均使用率を返します。
  • intervalキーワード引数
    例えばcpu_percent(interval=3)と指定すると、その場で3秒間待機して、3秒間のCPU使用率を算出します。
  • percpuキーワード引数
    cpu_percent(percpu=True)とすると、マルチコアCPUの各コアごとの使用率をリストで返します。

3.メモリの使用率を取得する

 メモリ不足はパフォーマンスの低下やシステムのクラッシュにつながりやすいため、メモリ使用率の監視も重要です。psutilのvirtual_memory()を使うと、物理メモリ(RAM)の空き容量や使用率を簡単に確認できます。

virtual_memory関数の利用例

psutil.virtual_memory()は名前付きタプルを返し、以下の情報が含まれます。

属性名意味
total全メモリ容量(バイト単位)
available使用可能なメモリ容量(バイト単位)
used使用中のメモリ容量(バイト単位)
percent全体に対する使用率(%)
その他システムやOSによって他の属性も利用可能

特にpercentを確認すれば、メモリ使用率をリアルタイムに把握できます。

4.ディスクの使用率を取得する

 ディスクの空き容量不足はファイル書き込みエラーやデータ破損の原因となるため、サーバーの運用やバックアップ管理ではディスク容量を定期監視することが重要です。psutilのdisk_usage(パス)関数を使うと、指定したパス(例:ルートディレクトリ"/")に対応するファイルシステムの使用状況を取得できます。

disk_usage関数のリターン値

 disk_usage("/")のように呼び出すと、以下の情報を含むオブジェクト(名前付きタプル)が返されます。

属性名意味
totalディスクの全容量(バイト)
used使用中の容量(バイト)
free空き容量(バイト)
percent使用率(%)

5.サンプルプログラム:CPU・メモリ・ディスクをまとめて監視する

 以下のコードをJupyterLabなどで実行すると、CPU・メモリ・ディスクの使用率を定期的に出力します。
停止したい場合は、JupyterLabの「停止ボタン」またはCtrl + Cなどで割り込みを行ってください。

※Python 3.12 を使用すると、psutil.disk_usage で他の Python バージョンでは発生しないエラーが発生するようです。Python3.11で動作確認をしています。

import psutil
import time

def monitor_resources(interval=3, iterations=5):
    """
    CPU・メモリ・ディスクの使用率を一定間隔で取得し、画面に表示する関数。
    interval   : 監視の間隔(秒)
    iterations : 何回繰り返すか
    """
    print("=== システムリソース監視を開始します ===")
    
    for i in range(iterations):
        # CPU使用率を取得
        cpu_usage = psutil.cpu_percent(interval=None)
        
        # メモリ使用率を取得
        mem_info = psutil.virtual_memory()
        mem_usage = mem_info.percent
        
        # ディスク使用率を取得(例としてCドライブ)
        disk_info = psutil.disk_usage("C:\\")
        disk_usage = disk_info.percent
        
        # 結果を表示
        print(f"[{i+1}/{iterations}] CPU: {cpu_usage:5.1f}%,"
              f" MEM: {mem_usage:5.1f}%, DISK: {disk_usage:5.1f}%")
        
        # インターバルを待機して次のループへ
        time.sleep(interval)
    
    print("=== 監視を終了しました ===")

# 実行例:3秒おきに3回計測
monitor_resources(interval=3, iterations=3)

実行結果

=== システムリソース監視を開始します ===
[1/3] CPU:  11.3%, MEM:  31.6%, DISK:  29.1%
[2/3] CPU:  12.7%, MEM:  31.7%, DISK:  29.1%
[3/3] CPU:  13.9%, MEM:  31.5%, DISK:  29.1%
=== 監視を終了しました ===

プログラムの解説

  • monitor_resources関数
    interval秒おきにリソース状況を取得し、合計iterations回繰り返す。
  • cpu_percent(interval=None)
    前回呼び出しからのCPU使用率を瞬時に取得。
  • psutil.virtual_memory()
    メモリ情報が格納された名前付きタプルを返し、そのうちpercentで使用率を取得。
  • psutil.disk_usage("/")
    指定したディレクトリ(またはドライブレター)配下のディスク使用状況を返し、そのうちpercentで使用率を取得。
  • time.sleep(interval)
    次の取得までinterval秒間待機してから再度処理を実行する。

 このようにCPU・メモリ・ディスクをまとめて取得・表示することで、システムに負荷がかかっていないかを定期的に確認できます。ループ回数を大きくすれば長時間の監視が可能ですし、ログファイルに書き出すようにすれば履歴管理も容易になります。

まとめ

 psutilを使えば、CPUやメモリ、ディスクなどのリソース使用状況をPythonコードの中で手軽に取得できます。これを活用して、定期的な監視ツールや異常検知の仕組みを構築すれば、システムトラブルを未然に防いだり、原因調査を迅速に行ったりできるでしょう。また、ネットワークインタフェースやプロセス情報など、psutilには多彩な機能が含まれているため、本格的なシステムモニタリングツールや解析スクリプトの作成にも役立ちます。ぜひ、さらに詳しい資料や公式ドキュメントを参照しながら、自分の環境や要件に合わせた監視機能を開発してみてください。