【Python】一定間隔でCPUとメモリの使用率を取得する

■概要

性能試験などの負荷検証で、処理負荷を調べるために、一定間隔で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

■参考

本ツールを作成するにあたり、参考とさせていただいたサイトを以下に示す。

コメント