Pythonを使用したCPUとメモリ使用率のリアルタイムグラフ表示
はじめに
本記事では、Pythonのpsutilとmatplotlibライブラリを使って、リアルタイムでCPUとメモリ使用率をグラフに表示する方法を解説します。
概要
以下、コード全文です。
import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 描画関数
def update(frame):
x.append(frame)
cpu_percent = psutil.cpu_percent()
mem_percent = psutil.virtual_memory().percent
cpu_data.append(cpu_percent)
mem_data.append(mem_percent)
ax1.plot(x, cpu_data, color='r', linewidth=2)
ax2.plot(x, mem_data, color='b', linewidth=2)
if len(x) > 50:
x.pop(0)
cpu_data.pop(0)
mem_data.pop(0)
ax1.set_xlim(x[0], x[-1])
ax2.set_xlim(x[0], x[-1])
plt.tight_layout()
if __name__ == '__main__':
# 初期化
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(10, 6))
ax1.set_ylim(0, 100)
ax1.set_title("CPU Usage (%)")
ax2.set_ylim(0, 100)
ax2.set_title("Memory Usage (%)")
x = []
cpu_data = []
mem_data = []
# グラフ表示
ani = FuncAnimation(fig, update, interval=1000)
plt.show()
実行すると、このようにグラフが表示されます。
1. 必要なライブラリのインストールとインポート
まず、psutil
が入っていない場合はインストールします。
pip install plotly dash psutil
コード内でpsutil
とmatplotlib
ライブラリをインポートします。psutil
はシステムリソースの情報を取得するために使用し、matplotlib
はデータをグラフに表示するために使用します。
import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
2. 描画関数の定義
次に、リアルタイムでグラフを更新するための描画関数update
を定義します。この関数は、FuncAnimation
オブジェクトによって繰り返し呼び出され、グラフをリアルタイムで更新します。
def update(frame):
x.append(frame)
cpu_percent = psutil.cpu_percent()
mem_percent = psutil.virtual_memory().percent
cpu_data.append(cpu_percent)
mem_data.append(mem_percent)
ax1.plot(x, cpu_data, color='r', linewidth=2)
ax2.plot(x, mem_data, color='b', linewidth=2)
if len(x) > 30:
x.pop(0)
cpu_data.pop(0)
mem_data.pop(0)
ax1.set_xlim(x[0], x[-1])
ax2.set_xlim(x[0], x[-1])
plt.tight_layout()
描画関数では、次の処理が行われます。
- CPU使用率とメモリ使用率を取得
- 使用率データをリストに追加
-
ax1
およびax2
のグラフオブジェクトに新しいデータをプロット - データポイントの数が30を超えた場合、古いデータを削除し、表示範囲を更新
-
plt.tight_layout()
を使用して、グラフのレイアウトを自動調整
3. グラフの初期化と表示
最後に、グラフの初期化と表示を行います。ここでは、plt.subplots()
関数を使用して、2つのサブプロット(CPU使用率とメモリ使用率)を作成します。また、それぞれのサブプロットのy軸の範囲とタイトルを設定します。
if __name__ == '__main__':
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(10, 6))
ax1.set_ylim(0, 100)
ax1.set_title("CPU Usage (%)")
ax2.set_ylim(
0, 100)
ax2.set_title("Memory Usage (%)")
x = []
cpu_data = []
mem_data = []
x
リストは、フレーム(時間)を格納するために使用されます。cpu_data
およびmem_data
リストは、それぞれCPU使用率とメモリ使用率のデータを格納するために使用されます。
ani = FuncAnimation(fig, update, interval=1000)
plt.show()
FuncAnimation
オブジェクトは、fig
(グラフオブジェクト)とupdate
(描画関数)を引数として受け取り、interval
パラメータで指定したミリ秒間隔で描画関数を繰り返し実行します。この例では、interval=1000
と指定しているため、描画関数は1秒ごとに実行されます。
最後に、plt.show()
を使用してグラフを表示します。これにより、リアルタイムで更新されるCPUとメモリ使用率のグラフが表示されます。
おわりに
かんたんですね。難しいところはpsutilとmatplotlibが全部やってくれます。個人的には、データを取得してグラフィカルな描画をするといった処理は、選択肢としてPython一択な気がしています。
Discussion