■概要
性能試験などの負荷検証で、処理負荷を調べるために、一定間隔でCPU使用率やメモリ使用率を取得することがある。
そのため、Pythonで処理を実装し、自動で一定間隔のCPU使用率およびメモリ使用率を取得するツールを作成する。
以降、本ツールを「CPU・メモリ使用率出力ツール」と呼ぶ。
▼実装概要
「CPU・メモリ使用率出力ツール」の実装概要を以下に示す。
- 出力形式はコンソールとする。
- 出力内容は、「[日時]:[ログレベル]:[スレッド名]:[モジュール名]:[関数名]:CPU使用率: メモリ使用率」とする。
- 間隔は秒までとし、ミリ秒の誤差は考慮しない。
- 一定間隔(ここでは※59秒とする)の設定は定数で持たせる。
※ 一定間隔は60秒ごとにしたいが、CPU使用率とメモリ使用率を取得するのに1秒程度かかるため、処理を待つ時間は「59」秒とする。 - 処理の終了機能は実装せず、「ctrl + c」で停止させる。
- 実行環境はMac(CPU:Intel製)とする。
■サンプルコード
「CPU・メモリ使用率出力ツール」のサンプルコードを以下に示す。
import logging
import psutil
import threading
# 日時:ログレベル:スレッド名:モジュール名:関数名:メッセージを出力する
LOGGING_FORMAT = '%(asctime)s:' \
+ '[%(levelname)s]:' \
+ '[%(threadName)s]:' \
+ '[%(module)s]:' \
+ '[%(funcName)s]:' \
+ '%(message)s'
# ログレベル:デバッグ
logging.basicConfig(
level=logging.DEBUG, format=LOGGING_FORMAT
)
# N秒間隔で測定
INTERVAL_SEC= 60
# CPUとMemoryの使用率を出力する関数
def check_cpu_memory(event):
while not event.wait(INTERVAL_SEC):
# CPU使用率を取得
cpu_data = psutil.cpu_percent(interval=1)
# Memoryを取得
mem_data = psutil.virtual_memory()
log_msg = str(cpu_data) + ": " + str(mem_data.percent)
# 「CPU使用率、メモリ使用率」を出力
logging.debug(log_msg)
# メイン処理
if __name__ == '__main__':
# 1分間隔で「CPUとMemoryの使用率を出力する関数」を実行
event = threading.Event()
t = threading.Thread(target=check_cpu_memory, args=(event, ))
t.start()
■実行結果
「■サンプルコード」のコードの実行結果を以下に示す。
2023-11-11 09:58:34,452:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:11.3: 70.7
2023-11-11 09:59:34,456:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:19.7: 70.7
2023-11-11 10:00:34,461:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:13.2: 71.2
2023-11-11 10:01:34,463:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:20.0: 71.1
2023-11-11 10:02:34,470:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:40.4: 71.8
2023-11-11 10:03:34,481:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:26.6: 71.9
2023-11-11 10:04:34,484:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:39.4: 72.0
2023-11-11 10:05:34,491:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:12.5: 69.9
2023-11-11 10:06:34,500:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:9.0: 67.8
2023-11-11 10:07:34,501:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:18.5: 71.7
2023-11-11 10:08:34,511:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:14.4: 71.3
2023-11-11 10:09:34,516:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:30.2: 72.0
2023-11-11 10:10:34,526:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:8.0: 72.7
2023-11-11 10:11:34,575:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:33.5: 72.8
2023-11-11 10:12:34,586:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:8.9: 72.7
2023-11-11 10:13:34,594:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:12.2: 72.8
2023-11-11 10:14:34,602:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:7.0: 73.1
2023-11-11 10:15:34,604:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:41.4: 72.9
2023-11-11 10:16:34,609:[DEBUG]:[Thread-1]:[check_cpu_mem]:[check_cpu_memory]:20.1: 70.8
■参考
本ツールを作成するにあたり、参考とさせていただいたサイトを以下に示す。
コメント