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