[Python] CPUの使用率を取得する方法
PythonでCPUの使用率を取得するには、標準ライブラリのpsutil
モジュールを使用するのが一般的です。
psutil
はシステムのパフォーマンス情報を取得するためのライブラリで、psutil.cpu_percent()関数
を使うことで、CPUの使用率を簡単に取得できます。
引数にinterval
を指定することで、指定した秒数の間隔でCPU使用率を計測することも可能です。
psutil
は外部ライブラリのため、事前にpip install psutil
でインストールが必要です。
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使用率をグラフに更新するには、matplotlib
のFuncAnimation
を使用します。
以下のコードは、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使用率を効果的に監視し、システムの健全性を保つことができます。
まとめ
この記事では、Pythonのpsutil
ライブラリを使用してCPUの使用率を取得する方法や、リアルタイムでのモニタリング、可視化、さらにはシステム監視の応用例について詳しく解説しました。
これにより、システムのパフォーマンスを把握し、必要な対策を講じるための手法を学ぶことができました。
今後は、実際にコードを試してみたり、システム監視のツールを自作したりすることで、より効果的にシステムの状態を管理していくことをお勧めします。