python3 psutilでシステムリソースを測る

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

機会学習用のデータがほしかったので、サーバーのCPU使用率などをpythonで取得してみた。

 

前提

pyenvをインストール。

CentOS7 pyenvをホームディレクトリにインストール

その後、python3.5.1をインストールして、pyvenvで環境構築。

pyenv install 3.5.1
pyenv local 3.5.1
pyenv global 3.5.1
pyvenv ~/.serverspec
source ~/.serverspec/bin/activate

 

psutilをインストール

pip install --upgrade pip
pip install ipython psutil

psutilを使ってみる。

ipythonを起動して、psutilを使ってみる。

ipython 

psutilで取得できるデータの一覧。

In [1]: import psutil

In [2]: psutil.
psutil.AF_LINK              psutil.IOPRIO_CLASS_RT      psutil.STATUS_ZOMBIE        psutil.net_if_stats
psutil.AccessDenied         psutil.NIC_DUPLEX_FULL      psutil.TimeoutExpired       psutil.net_io_counters
psutil.CONN_CLOSE           psutil.NIC_DUPLEX_HALF      psutil.ZombieProcess        psutil.os
psutil.CONN_CLOSE_WAIT      psutil.NIC_DUPLEX_UNKNOWN   psutil.boot_time            psutil.pid_exists
psutil.CONN_CLOSING         psutil.NoSuchProcess        psutil.callable             psutil.pids
psutil.CONN_ESTABLISHED     psutil.PROCFS_PATH          psutil.collections          psutil.process_iter
psutil.CONN_FIN_WAIT1       psutil.Popen                psutil.cpu_count            psutil.pwd
psutil.CONN_FIN_WAIT2       psutil.Process              psutil.cpu_percent          psutil.signal
psutil.CONN_LAST_ACK        psutil.STATUS_DEAD          psutil.cpu_times            psutil.subprocess
psutil.CONN_LISTEN          psutil.STATUS_DISK_SLEEP    psutil.cpu_times_percent    psutil.swap_memory
psutil.CONN_NONE            psutil.STATUS_IDLE          psutil.disk_io_counters     psutil.sys
psutil.CONN_SYN_RECV        psutil.STATUS_LOCKED        psutil.disk_partitions      psutil.test
psutil.CONN_SYN_SENT        psutil.STATUS_RUNNING       psutil.disk_usage           psutil.time
psutil.CONN_TIME_WAIT       psutil.STATUS_SLEEPING      psutil.errno                psutil.traceback
psutil.Error                psutil.STATUS_STOPPED       psutil.functools            psutil.users
psutil.IOPRIO_CLASS_BE      psutil.STATUS_TRACING_STOP  psutil.long                 psutil.version_info
psutil.IOPRIO_CLASS_IDLE    psutil.STATUS_WAITING       psutil.net_connections      psutil.virtual_memory
psutil.IOPRIO_CLASS_NONE    psutil.STATUS_WAKING        psutil.net_if_addrs         psutil.wait_procs

CPU使用率をみてみる。

In [2]: psutil.cpu_percent()
Out[3]: 4.6

メモリ使用率をみてみる。

In [2]: mem = psutil.virtual_memory()

In [3]: mem.
mem.active     mem.buffers    mem.count      mem.inactive   mem.percent    mem.used
mem.available  mem.cached     mem.free       mem.index      mem.total

In [3]: mem.used
Out[3]: 3430801408

サーバーへのアクセス状況をみてみる。

In [10]: net = psutil.net_connections()

In [11]: net
Out[11]:
[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 30033), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 10011), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('2408:210:8864:2800:219:99ff:fe8b:3812', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('0.0.0.0', 9987), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('192.168.0.31', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 22), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('192.168.0.31', 22), raddr=('192.168.0.1', 62906), status='ESTABLISHED', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::', 80), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('0.0.0.0', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::ffff:192.168.0.31', 80), raddr=('::ffff:192.168.0.1', 64518), status='ESTABLISHED', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::', 8009), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::', 22), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('192.168.0.31', 22), raddr=('192.168.0.1', 64524), status='ESTABLISHED', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('127.0.0.1', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('127.0.0.1', 3310), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 21), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('::1', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::ffff:127.0.0.1', 8005), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('::', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::ffff:192.168.0.31', 80), raddr=('::ffff:66.249.75.231', 49748), status='ESTABLISHED', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('192.168.0.31', 40368), raddr=('194.97.114.3', 2010), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('::', 8080), raddr=(), status='LISTEN', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('192.168.0.31', 34789), raddr=('59.106.194.79', 443), status='TIME_WAIT', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=('fe80::219:99ff:fe8b:3812', 123), raddr=(), status='NONE', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 3306), raddr=(), status='LISTEN', pid=None)]

In [12]: type(net)
Out[12]: list

In [13]: net[0]
Out[13]: sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=('0.0.0.0', 30033), raddr=(), status='LISTEN', pid=None)

配列で返してくれるあたりが親切。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です