Python之psutil

psutil

简介psutil是一个跨平台(http://code.google.com/p/psutil),能够轻松实现获取系统运行的进程和系统利用率包括(保存CPU、内存、磁盘、网络等)信息。它实现了同等命令行工具提供的功能,如pstoplsofnetstatifconfigwhodfkillfreeniceioniceiostatiotopuptimepidofttytasksetpmap

安装

https://www.cnblogs.com/liu-yao/p/5678157.html

yum install -y python-pip

功能函数

  • CPU相关
  • Memory内存相关
  • Disk相关
  • Network相关
  • 进程管理

CPU

函数 描述
psutil.cpu_count() cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数。
psutil.cpu_percent() cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率
psutil.cpu_times() cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费
psutil.cpu_times_percent() cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道,该函数返回的是耗时比例。
psutil.cpu_stats() cpu_stats()以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数。
psutil.cpu_freq() cpu_freq([percpu]):返回cpu频率

示例

import psutil
# 查看cpu个数
psutil.cpu_count() # 2
psutil.cpu_count(logical=True) # 2
psutil.cpu_count(logical=False) # 2
# 查看cpu利用率
psutil.cpu_percent() # 0.8
psutil.cpu_percent(percpu=True) # [0.8, 0.7]
# 查看cpu时间花费
psutil.cpu_times() # scputimes(user=96.72, nice=0.09, system=97.48, idle=45351.82, iowait=8.11, irq=0.0, softirq=5.15, steal=0.0, guest=0.0, guest_nice=0.0)

psutil.cpu_times(percpu=True) 
# [scputimes(user=45.88, nice=0.07, system=50.23, idle=22705.37, iowait=0.48, irq=0.0, softirq=1.89, steal=0.0, guest=0.0, guest_nice=0.0),scputimes(user=50.93, nice=0.01, system=47.35, idle=22670.42, iowait=7.62, irq=0.0, softirq=3.26, steal=0.0, guest=0.0, guest_nice=0.0)]

cpu_time = psutil.cpu_times()
cpu_time.user # 97.99 根据cpu_time获取响应的值

Memory

virtual_memory():以命名元组的形式返回内存使用情况,包括总内存,可用内存,内存利用率,buffer和cache等。单位为字节。

psutil.virtual_memory() # svmem(total=4125122560L, available=3663482880L, percent=11.2, used=1014362112L, free=3110760448L, active=458932224, inactive=325615616, buffers=2125824L, cached=550596608)

swap_memory():以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出。

psutil.swap_memory() # sswap(total=1073737728L, used=0L, free=1073737728L, percent=0.0, sin=0, sout=0)

单位转换

import psutil
def bytes2human(n):
     symbols = ('K','M','G','T','P','E','Z','Y')
     prefix = {}
     for i,s in enumerate(symbols):
         prefix[s] = 1 << (i + 1) * 10
     for s in reversed(symbols):
         if n >= prefix[s]:
             value = float(n) / prefix[s]
             return '%.1f%s' % (value,s)
     return '%sB' % n
print bytes2human(psutil.virtual_memory().total)

Disk

函数 描述
psutil.disk_io_counters() disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等。 当perdisk的值为True,则分别列出单个磁盘的统计信息(字典:key为磁盘名称,value为统计的namedtuple)。
psutil.disk_partitions() disk_partitions([all=False]):以命名元组的形式返回所有已挂载的磁盘,包含磁盘名称,挂载点,文件系统类型等信息。 当all等于True时,返回包含/proc等特殊文件系统的挂载信息
psutil.disk_usage() disk_usage(path):以命名元组的形式返回path所在磁盘的使用情况,包括磁盘的容量、已经使用的磁盘容量、磁盘的空间利用率等。

示例

# 查看所有已挂在的磁盘
psutil.disk_partitions() #[sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'),sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 使用列表表达式查询指定挂载点信息
[device for device in psutil.disk_partitions() if device.mountpoint == '/']
# [sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 查看磁盘使用情况
psutil.disk_usage('/') #sdiskusage(total=20179845120, used=2114883584, free=18064961536, percent=10.5)
# 查看磁盘io统计汇总
psutil.disk_io_counters() #sdiskio(read_count=5964, write_count=35722, read_bytes=249860608, write_bytes=629057536, read_time=3929, write_time=108205)
# 分别列出单个磁盘的统计信息
psutil.disk_io_counters(perdisk=True)
# 输出结果
{'sda1': sdiskio(read_count=508, write_count=519, read_bytes=5687808, write_bytes=2117632, read_time=88, write_time=69),
 'sda2': sdiskio(read_count=52, write_count=0, read_bytes=2265088, write_bytes=0, read_time=19, write_time=0),
 'sda3': sdiskio(read_count=5404, write_count=35240, read_bytes=241907712, write_bytes=627201024, read_time=3822, write_time=108206),
 'sr0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0)}

Network

函数 详情
psutil.net_io_counter([pernic]) 以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。
psutil.net_connections([kind]) 以列表的形式返回每个网络连接的详细信息(namedtuple)。命名元组包含fd, family, type, laddr, raddr, status, pid等信息。kind表示过滤的连接类型,支持的值如下:(默认为inet)
psutil.net_if_addrs() 以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。
psutil.net_if_stats() 返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu。
psutil.users() 以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端,与主机信息
psutil.boot_time() 以时间戳的形式返回系统的启动时间

示例

# 查看网卡信息统计
psutil.net_io_counters() # snetio(bytes_sent=2436593, bytes_recv=86547298, packets_sent=29381, packets_recv=66642, errin=0, errout=0, dropin=0, dropout=0)
# 查看网卡配置信息
psutil.net_if_addrs()
a = psutil.net_if_addrs()
a['eth0']
# 查看当前登录用户信息
psutil.users() # [suser(name='root', terminal='tty1', host='', started=1591149568.0),
 suser(name='root', terminal='pts/0', host='192.168.8.1', started=1591149568.0),
 suser(name='root', terminal='pts/1', host='192.168.8.1', started=1591149824.0)]

进程管理

函数 详情
psutil.pids() 以列表的形式返回当前正在运行的进程
psutil.pid_exists(1) 判断给点定的pid是否存在
psutil.process_iter() 迭代当前正在运行的进程,返回的是每个进程的Process对象
psutil.Process() 对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号

进程相关信息的方法

  • name:获取进程的名称
  • cmdline:获取启动进程的命令行参数
  • create_time:获取进程的创建时间(时间戳格式)
  • num_fds:进程打开的文件个数
  • num_threads:进程的子进程个数
  • is_running:判断进程是否正在运行
  • send_signal:给进程发送信号,类似与os.kill等
  • kill:发送SIGKILL信号结束进程
  • terminate:发送SIGTEAM信号结束进程

示例

# 以列表形式查看正在运行的进程
psutil.pids() # [1,2,3,5,7,8,9,10,11,12,13,14,...
# 查看进程运行状态,以布尔形式显示
psutil.pid_exists(1) # True
# 迭代当前正在运行进程,查看列表中前三个实例的信息
list(psutil.process_iter())[:3] #  [,,]
# 通过进程号实例化对象
process = psutil.Process(1) # 
# 获取进程的名称
process.name() # 'systemd'
process.create_time() # 1591149592.13
process.num_fds() # 41
process.num_threads() # 1

你可能感兴趣的:(Python之psutil)