[Python] CPUの使用率を取得する方法

PythonでCPUの使用率を取得するには、標準ライブラリのpsutilモジュールを使用するのが一般的です。

psutilはシステムのパフォーマンス情報を取得するためのライブラリで、psutil.cpu_percent()関数を使うことで、CPUの使用率を簡単に取得できます。

引数にintervalを指定することで、指定した秒数の間隔でCPU使用率を計測することも可能です。

psutilは外部ライブラリのため、事前にpip install psutilでインストールが必要です。

この記事でわかること
  • psutilライブラリの基本的な使い方
  • CPU使用率をリアルタイムで監視する方法
  • マルチコア環境での使用率取得方法
  • CPU使用率の可視化手法
  • システム監視の応用例と対策

目次から探す

psutilライブラリとは

psutilは、Pythonでシステムの情報を取得するためのライブラリです。

CPU、メモリ、ディスク、ネットワークなどのリソースの使用状況を簡単に取得できるため、システム監視やパフォーマンス分析に非常に便利です。

特に、CPUの使用率やメモリの使用量をリアルタイムで取得することができ、システムの状態を把握するのに役立ちます。

psutilの概要

psutilは、以下のような機能を提供しています。

  • CPUの使用率やコアごとの使用状況の取得
  • メモリの使用量や空き容量の取得
  • ディスクの使用状況やI/O操作の監視
  • ネットワークの送受信データ量の取得
  • プロセス情報の取得と管理

これにより、システムのパフォーマンスを監視し、必要に応じて最適化を行うことが可能です。

psutilのインストール方法

psutilは、Pythonのパッケージ管理ツールであるpipを使用して簡単にインストールできます。

以下のコマンドを実行してください。

pip install psutil

インストールが完了すると、Pythonのスクリプト内でpsutilをインポートして使用できるようになります。

psutilでできること

psutilを使用することで、以下のような情報を簡単に取得できます。

スクロールできます
機能説明
CPU使用率システム全体またはコアごとの使用率を取得
メモリ使用量使用中のメモリ量や空きメモリ量を取得
ディスク使用状況ディスクの使用量や空き容量を取得
ネットワーク情報送受信データ量や接続状況を取得
プロセス管理実行中のプロセス情報を取得・管理

これらの機能を活用することで、システムの状態を把握し、必要な対策を講じることができます。

CPU使用率を取得する基本的な方法

Pythonのpsutilライブラリを使用すると、CPUの使用率を簡単に取得できます。

ここでは、psutil.cpu_percent()関数を使った基本的な方法について解説します。

psutil.cpu_percent()の使い方

psutil.cpu_percent()関数は、CPUの使用率をパーセンテージで返します。

基本的な使い方は以下の通りです。

import psutil

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# CPUの使用率を取得
cpu_usage = psutil.cpu_percent()
print(f"CPUの使用率: {cpu_usage}%")

このコードを実行すると、現在のCPUの使用率が表示されます。

CPUの使用率: 15.0%

interval引数の役割

psutil.cpu_percent()関数には、intervalという引数があります。

この引数を指定することで、CPUの使用率を計測する時間間隔を設定できます。

例えば、intervalを1秒に設定すると、1秒間のCPU使用率を計測します。

import psutil

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# 1秒間のCPU使用率を取得
cpu_usage = psutil.cpu_percent(interval=1)
print(f"1秒間のCPUの使用率: {cpu_usage}%")

このコードを実行すると、1秒間のCPU使用率が表示されます。

1秒間のCPUの使用率: 20.0%

percpu引数でコアごとの使用率を取得する方法

psutil.cpu_percent()関数percpu引数をTrueに設定すると、各CPUコアごとの使用率を取得できます。

これにより、マルチコア環境でのCPUの使用状況を詳細に把握できます。

import psutil

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# 各コアごとのCPU使用率を取得
cpu_usage_per_core = psutil.cpu_percent(percpu=True)
print("各コアのCPUの使用率:", cpu_usage_per_core)

このコードを実行すると、各コアのCPU使用率がリスト形式で表示されます。

各コアのCPUの使用率: [10.0, 15.0, 20.0, 5.0]

このように、psutilを使うことで、CPUの使用率を簡単に取得し、システムのパフォーマンスを監視することができます。

CPU使用率のリアルタイムモニタリング

CPUの使用率をリアルタイムでモニタリングすることは、システムのパフォーマンスを把握する上で非常に重要です。

ここでは、Pythonを使ってCPU使用率をリアルタイムで監視する方法を解説します。

ループを使ったリアルタイムモニタリング

CPU使用率をリアルタイムでモニタリングするためには、無限ループを使用して定期的に使用率を取得し、表示する方法が一般的です。

以下のコードは、CPUの使用率を1秒ごとに表示する例です。

import psutil
import time
while True:
    cpu_usage = psutil.cpu_percent(interval=1)
    print(f"CPUの使用率: {cpu_usage}%")

このコードを実行すると、CPUの使用率が1秒ごとに更新されて表示されます。

time.sleep()での間隔調整

無限ループを使用する場合、time.sleep()関数を使って間隔を調整することもできます。

これにより、CPUの使用率を取得する頻度を制御できます。

以下の例では、2秒ごとにCPUの使用率を表示します。

import psutil
import time
while True:
    cpu_usage = psutil.cpu_percent()
    print(f"CPUの使用率: {cpu_usage}%")
    time.sleep(2)  # 2秒待機

このコードを実行すると、CPUの使用率が2秒ごとに表示されます。

CPU使用率のログをファイルに保存する方法

リアルタイムモニタリングの結果をファイルに保存することで、後から分析することができます。

以下のコードは、CPUの使用率を1秒ごとに取得し、cpu_usage_log.txtというファイルに保存する例です。

import psutil
import time

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

with open("cpu_usage_log.txt", "w") as log_file:
    while True:
        cpu_usage = psutil.cpu_percent(interval=1)
        log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - CPUの使用率: {cpu_usage}%\n")
        print(f"CPUの使用率: {cpu_usage}%")

このコードを実行すると、CPUの使用率が1秒ごとにファイルに記録され、同時にコンソールにも表示されます。

ファイルには、タイムスタンプとともにCPUの使用率が保存されます。

これにより、システムのパフォーマンスを長期間にわたって監視し、必要に応じて分析することが可能になります。

マルチコア環境でのCPU使用率取得

マルチコアプロセッサを搭載したシステムでは、各コアのCPU使用率を把握することが重要です。

ここでは、全コアの平均使用率を取得する方法や、各コアごとの使用率を取得する方法について解説します。

全コアの平均使用率を取得する方法

全コアの平均CPU使用率を取得するには、psutil.cpu_percent()関数を使用し、percpu引数をFalseに設定します。

以下のコードは、全コアの平均使用率を取得する例です。

import psutil

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# 全コアの平均CPU使用率を取得
average_cpu_usage = psutil.cpu_percent()
print(f"全コアの平均CPUの使用率: {average_cpu_usage}%")

このコードを実行すると、全コアの平均CPU使用率が表示されます。

全コアの平均CPUの使用率: 25.0%

各コアごとの使用率を取得する方法

各コアごとのCPU使用率を取得するには、psutil.cpu_percent()関数percpu引数をTrueに設定します。

以下のコードは、各コアの使用率を取得する例です。

import psutil

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# 各コアごとのCPU使用率を取得
cpu_usage_per_core = psutil.cpu_percent(percpu=True)
print("各コアのCPUの使用率:", cpu_usage_per_core)

このコードを実行すると、各コアのCPU使用率がリスト形式で表示されます。

各コアのCPUの使用率: [10.0, 20.0, 15.0, 5.0]

マルチコア環境でのパフォーマンスの考慮点

マルチコア環境でのCPU使用率を監視する際には、以下の点に注意が必要です。

  • 負荷分散: アプリケーションが複数のコアに均等に負荷を分散できているか確認することが重要です。

特定のコアに負荷が集中すると、パフォーマンスが低下する可能性があります。

  • スレッド管理: マルチスレッドアプリケーションでは、スレッドの管理が重要です。

スレッドが適切にコアに割り当てられているかを確認し、必要に応じて調整します。

  • CPUバウンドとI/Oバウンド: アプリケーションがCPUバウンド(CPUの処理能力がボトルネック)かI/Oバウンド(ディスクやネットワークの処理がボトルネック)かを理解することで、最適なパフォーマンスを引き出すための対策を講じることができます。

これらの考慮点を踏まえ、マルチコア環境でのCPU使用率を適切に監視し、システムのパフォーマンスを最適化することが重要です。

CPU使用率の可視化

CPU使用率を可視化することで、システムのパフォーマンスを直感的に理解しやすくなります。

ここでは、Pythonのmatplotlibライブラリを使用してCPU使用率をグラフ表示する方法について解説します。

matplotlibを使ったグラフ表示

matplotlibを使用すると、CPU使用率を簡単にグラフとして表示できます。

以下のコードは、CPUの使用率を取得し、グラフにプロットする例です。

import psutil
import matplotlib.pyplot as plt

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# CPU使用率を取得
cpu_usage = psutil.cpu_percent(interval=1)
# グラフの作成
plt.figure(figsize=(6, 4))
plt.bar(['CPU使用率'], [cpu_usage], color='blue')
plt.ylim(0, 100)
plt.title('CPU使用率')
plt.ylabel('使用率 (%)')
plt.show()

このコードを実行すると、CPUの使用率を示す棒グラフが表示されます。

リアルタイムでのグラフ更新方法

リアルタイムでCPU使用率をグラフに更新するには、matplotlibFuncAnimationを使用します。

以下のコードは、CPU使用率を1秒ごとに更新するリアルタイムグラフの例です。

import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# グラフの初期設定
fig, ax = plt.subplots()
bar = ax.bar(['CPU使用率'], [0], color='blue')
ax.set_ylim(0, 100)
ax.set_title('リアルタイムCPU使用率')
ax.set_ylabel('使用率 (%)')
# 更新関数
def update(frame):
    cpu_usage = psutil.cpu_percent()
    bar[0].set_height(cpu_usage)
    return bar
# アニメーションの開始
ani = FuncAnimation(fig, update, interval=1000)
plt.show()

このコードを実行すると、CPUの使用率が1秒ごとに更新されるリアルタイムグラフが表示されます。

CPU使用率のヒストグラムを作成する方法

CPU使用率のヒストグラムを作成することで、使用率の分布を視覚的に把握できます。

以下のコードは、CPU使用率を取得し、ヒストグラムを表示する例です。

import psutil
import matplotlib.pyplot as plt

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

# CPU使用率を取得
cpu_usages = [psutil.cpu_percent(interval=1) for _ in range(100)]
# ヒストグラムの作成
plt.figure(figsize=(8, 5))
plt.hist(cpu_usages, bins=10, color='green', edgecolor='black')
plt.title('CPU使用率のヒストグラム')
plt.xlabel('使用率 (%)')
plt.ylabel('頻度')
plt.xlim(0, 100)
plt.show()

このコードを実行すると、100回のCPU使用率を取得し、その分布を示すヒストグラムが表示されます。

これらの可視化手法を活用することで、CPU使用率の変動を直感的に理解し、システムのパフォーマンスをより効果的に監視することができます。

応用例:CPU使用率を使ったシステム監視

CPU使用率を監視することは、システムの健全性を保つために重要です。

ここでは、CPU使用率を使ったさまざまなシステム監視の応用例を紹介します。

CPU使用率が一定値を超えた場合のアラート通知

CPU使用率が一定の閾値を超えた場合にアラートを通知することで、システムの異常を早期に検知できます。

以下のコードは、CPU使用率が80%を超えた場合にアラートを表示する例です。

import psutil
import time

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

threshold = 80  # アラートの閾値
while True:
    cpu_usage = psutil.cpu_percent(interval=1)
    if cpu_usage > threshold:
        print(f"アラート: CPUの使用率が{cpu_usage}%を超えました!")
    time.sleep(1)

このコードを実行すると、CPUの使用率が80%を超えた場合にアラートが表示されます。

CPU使用率とメモリ使用率を組み合わせた監視

CPU使用率とメモリ使用率を同時に監視することで、システムのパフォーマンスをより詳細に把握できます。

以下のコードは、両方の使用率を監視し、いずれかが閾値を超えた場合にアラートを表示します。

import psutil
import time

# 1秒待機(CPU使用率を取得する時間を作るため)
import time   
time.sleep(1)

cpu_threshold = 80  # CPUの閾値
memory_threshold = 80  # メモリの閾値
while True:
    cpu_usage = psutil.cpu_percent(interval=1)
    memory_usage = psutil.virtual_memory().percent
    
    if cpu_usage > cpu_threshold:
        print(f"アラート: CPUの使用率が{cpu_usage}%を超えました!")
    
    if memory_usage > memory_threshold:
        print(f"アラート: メモリの使用率が{memory_usage}%を超えました!")
    
    time.sleep(1)

このコードを実行すると、CPUまたはメモリの使用率がそれぞれの閾値を超えた場合にアラートが表示されます。

CPU使用率をWebアプリケーションで表示する方法

CPU使用率をWebアプリケーションで表示することで、リモートからシステムの状態を監視できます。

以下は、Flaskを使用してCPU使用率を表示する簡単なWebアプリケーションの例です。

from flask import Flask, jsonify
import psutil
app = Flask(__name__)
@app.route('/cpu_usage')
def cpu_usage():
    usage = psutil.cpu_percent()
    return jsonify(cpu_usage=usage)
if __name__ == '__main__':
    app.run(debug=True)

このコードを実行すると、/cpu_usageエンドポイントにアクセスすることで、現在のCPU使用率をJSON形式で取得できます。

CPU使用率を定期的に記録してレポートを作成する方法

CPU使用率を定期的に記録し、レポートを作成することで、システムのパフォーマンスを分析できます。

以下のコードは、CPU使用率を1分ごとに記録し、CSVファイルに保存する例です。

import psutil
import time
import csv
with open("cpu_usage_report.csv", "w", newline='') as csvfile:
    fieldnames = ['timestamp', 'cpu_usage']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    while True:
        cpu_usage = psutil.cpu_percent()
        timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
        writer.writerow({'timestamp': timestamp, 'cpu_usage': cpu_usage})
        print(f"{timestamp} - CPUの使用率: {cpu_usage}%")
        time.sleep(60)  # 1分ごとに記録

このコードを実行すると、CPUの使用率が1分ごとにcpu_usage_report.csvファイルに記録されます。

これにより、後からデータを分析し、システムのパフォーマンスを評価することができます。

これらの応用例を活用することで、CPU使用率を効果的に監視し、システムの健全性を保つことができます。

よくある質問

psutilを使わずにCPU使用率を取得する方法はありますか?

はい、psutilを使わずにCPU使用率を取得する方法はいくつかあります。

例えば、osモジュールを使用して、システムの情報を取得することができます。

Linux環境では、/proc/statファイルを読み取ることでCPUの使用状況を確認できます。

以下はその一例です。

with open('/proc/stat', 'r') as f:
    lines = f.readlines()
    cpu_info = lines[0].split()
    total_time = sum(map(int, cpu_info[1:]))
    idle_time = int(cpu_info[4])
    cpu_usage = 100 * (total_time - idle_time) / total_time
    print(f"CPUの使用率: {cpu_usage}%")

ただし、psutilを使用する方が簡単で、クロスプラットフォームで動作するため、一般的にはpsutilの使用が推奨されます。

psutil.cpu_percent()が常に0%を返すのはなぜですか?

psutil.cpu_percent()が常に0%を返す場合、いくつかの原因が考えられます。

  1. interval引数の設定: interval引数を指定しない場合、関数は直前のCPU使用率を計測するため、最初の呼び出しでは0%が返されることがあります。

1秒以上の間隔を指定して再度呼び出すと、正しい値が得られることが多いです。

  1. CPUのアイドル状態: システムがアイドル状態である場合、CPU使用率が0%になることがあります。

この場合、他のプロセスがCPUを使用していないため、結果として0%が返されます。

  1. 権限の問題: 一部のシステムでは、特定の権限がないとCPU使用率を正しく取得できないことがあります。

管理者権限でスクリプトを実行してみてください。

CPU使用率が高い場合、どのように対処すればよいですか?

CPU使用率が高い場合、以下の対策を検討することができます。

  1. プロセスの確認: psutilを使用して、どのプロセスがCPUを多く使用しているかを確認します。

これにより、リソースを消費しているアプリケーションを特定できます。

   for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
       print(proc.info)
  1. 不要なプロセスの終了: 高いCPU使用率を引き起こしている不要なプロセスを終了することで、リソースを解放できます。
  2. アプリケーションの最適化: CPUを多く消費しているアプリケーションのコードを見直し、最適化を行うことで、パフォーマンスを改善できます。
  3. ハードウェアのアップグレード: システムの負荷が高い場合、CPUやメモリのアップグレードを検討することも一つの手段です。
  4. 負荷分散: マルチスレッドやマルチプロセスを活用して、負荷を複数のコアに分散させることで、全体のパフォーマンスを向上させることができます。

これらの対策を講じることで、CPU使用率を適切に管理し、システムのパフォーマンスを向上させることができます。

まとめ

この記事では、Pythonのpsutilライブラリを使用してCPUの使用率を取得する方法や、リアルタイムでのモニタリング、可視化、さらにはシステム監視の応用例について詳しく解説しました。

これにより、システムのパフォーマンスを把握し、必要な対策を講じるための手法を学ぶことができました。

今後は、実際にコードを試してみたり、システム監視のツールを自作したりすることで、より効果的にシステムの状態を管理していくことをお勧めします。

  • URLをコピーしました!
目次から探す