Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【psutil】Pythonによるハードウェア情報の取得

はじめに

本記事では、psutilを用いてハードウェア情報を取得する方法を簡単にご紹介します。

 

1. psutil

psutilの公式ドキュメントは以下のリンクです。

psutil documentation — psutil 5.9.5 documentation

psutilはPythonで実行中のプロセスとシステム使用率(CPU、メモリ、ディスク、ネットワーク、センサー)に関する情報を取得するためのクロスプラットフォームライブラリです。

ライブラリのインストールは下記のコマンドを実行します。

 

2. CPU情報の取得

2.1 物理コア数

下記のコマンドで物理コア数を取得します。

2.2 論理コア数

下記のコマンドで論理コア数(スレッド数)を取得します。

2.3 CPU使用率

下記のコマンドでCPU使用率を取得します。単位はパーセントです。ここでintervalはCPU時間を指定します。ここではCPU時間1です。

また各CPUの使用率を取得するには下記のコマンドを使用します。

 

2.4 CPU周波数

CPU 周波数をMHzで表示します。現在の周波数、最大周波数、最小周波数を取得します。個別の周波数を取得することもできます。

 

2.5 CPU待ちタスク数

システムの全体的な負荷状況を知りたい時に使います。topコマンドのload averageと同じ情報です。1、5、15分間のCPUの処理を待っているタスクの数を表示します。

 

3. メモリ情報の取得

3.1 メモリの仕様に関する統計値(使用メモリ、空きメモリ等)

下記のコマンドでメモリの仕様に関する統計値を取得します。

各項目の意味は下表をご覧ください。

指標 意味
total 物理メモリの合計
available システムがスワップすることなく、プロセスに即座に与えることができるメモリ
percent (total - available) / total * 100で計算された使用率
used 使用されているメモリ
free 全く利用されていない、すぐ利用できるメモリ
active 現在使用中またはごく最近使用されたメモリ
inactive 未使用としてマークされているメモリ
buffers ファイル システムのメタデータなどのキャッシュ
cached さまざまなもののためのキャッシュ
shared 複数のプロセスが同時にアクセスできるメモリ
slab カーネル内のデータ構造キャッシュ

 

3.2 スワップメモリの仕様に関する統計値

システムスワップメモリ統計値を取得します。

各項目意味は下表をご覧ください。

指標 意味
total バイト単位の合計スワップメモリ
used 使用されたスワップメモリ (バイト単位)
free 空きスワップメモリ​​ (バイト単位)
percent (total - available) / total * 100で計算された使用率
sin システムがディスクからスワップインしたバイト数 (累積)
sout システムがディスクからスワップアウトしたバイト数 (累積)

 

4. ディスク情報の取得

4.1 パーティション

下記のコマンドでマウントされたすべてのパーティションを表示します。

各項目の意味は下表をご覧ください。

指標 意味
device バイスのパス
mountpoint マウント ポイントのパス
free 空きスワップメモリ​​ (バイト単位)
fstype パーティションファイルシステム
opts ドライブ/パーティションのさまざまなマウントオプションを示すカンマ区切りの文字列
maxfile ファイル名に指定できる最大長
maxpath パス名 (ディレクトリ名 + ベースファイル名) の最大長

4.2 ディスク使用統計値(合計領域、使用済み領域、空き領域 、使用率)

下記のコマンドでディスク使用統計値を取得します。バイト単位の合計領域、使用済み領域、空き領域 、使用率が表示されます。使用率などの個別の情報を取得することもできます。

4.3 システム全体のディスク I/O 統計値

下記のコマンドでシステム全体のディスク I/O 統計値を取得します。

各項目の意味は下表をご覧ください。

指標 意味
read_count 読み取り数
write_count 書き込み回数
read_bytes 読み取られたバイト数
write_bytes 書き込まれたバイト数
read_time ディスクからの読み取りに費やした時間 (ミリ秒単位)
write_time ディスクへの書き込みにかかった時間 (ミリ秒単位)
read_merged_count マージされた読み取りの数
write_merged_count マージされた書き込みの数
busy_time 実際の I/O に費やした時間 (ミリ秒単位)

 

5. ネットワーク情報の取得

5.1 ネットワーク I/O 統計値

下記のコマンドでネットワークI/Oの統計値を取得します。

各項目の意味は下表をご覧ください。

指標 意味
bytes_sent 送信されたバイト数
bytes_recv 受信したバイト数
packets_sent 送信されたパケットの数
packets_recv 受信したパケット数
errin 受信中のエラーの総数
errout 送信中のエラーの総数
dropin ドロップされた受信パケットの総数
dropout ドロップされた送信パケットの総数

 

5.2 ソケット接続情報

下記のコマンドでソケット接続情報を取得します。

各項目の意味は下表をご覧ください。

指標 意味
fd ソケットファイル記述子
family アドレスファミリ、AF_INET、AF_INET6またはAF_UNIXのいずれか。
type アドレスのタイプ ( SOCK_STREAM、SOCK_DGRAM、または SOCK_SEQPACKET )。
packets_recv 受信したパケット数
laddr ローカルアドレス(ip, port)
raddr リモートエンドポイントのアドレス(ip, port)
status TCP接続のステータス。UDPおよびUNIXソケットの場合、NONE
pid ソケットを開いたプロセスの PID

 

5.3 NICに関連付けられたアドレス、キーを表示

NIC (ネットワーク インターフェイス カード) に関連付けられたアドレスを、キーが NIC 名で、値が NIC に割り当てられた各アドレスの名前付きタプルのリストである辞書とします。

各項目の意味は下表をご覧ください。

指標 意味
family MACアドレスを参照するアドレスファミリ (AF_INET、AF_INET6、psutil.AF_LINK) 。
address NIC アドレス
netmask サブネットマスク
broadcast ブロードキャストアドレス
ptp ポイントツーポイントを表す。VPN上の宛先アドレス。

 

6. センサー情報の取得

6.1 ハードウェア温度

下記のプログラムでハードウェア温度(摂氏)を取得します。OSでセンサーがサポートされていない場合は空の辞書になります。

6.2 ファン速度

下記のプログラムでファン速度(単位rpm:1分あたりの回転数)を取得します。OSでセンサーがサポートされていない場合は空の辞書になります。

 

7. その他

7.1 システムの起動日時

下記のプログラムでシステムの起動日時を取得します。

7.2 システムに接続しているユーザー

下記のプログラムでシステムに接続しているユーザーを取得します。

各項目の意味は下表をご覧ください。

指標 意味
name ユーザーの名前
terminal ユーザーに関連付けられたttyまたは疑似tty
host エントリに関連付けられたホスト名
starting UNIXエポックからの経過ミリ秒数での作成時刻
pid ログインプロセスの PID

 

参考文献

psutil.readthedocs.io

blog.imind.jp

おわりに

本記事では、psutilを用いてハードウェア情報を取得する方法を簡単にご紹介しました。プログラムの実行時のハードウェアの情報や運用中のシステム状態監視などに活用できそうですね。