通常linux系统的基础信息如内存、cpu等这些都是通过shell来获取。不过python的psutil模块把shell查看系统基础信息的功能都包装了下,使用更加简单,功能丰富。
psutil安装
地址:https://pypi.python.org/pypi?:action=display&name=psutil
下载源码后安装
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate tar zxvf psutil-3.2.1.tar.gz cd psutil-3.2.1 sudo python setup.py install
获取系统基本信息的使用
CPU信息
linux系统中的cpu主要有几个部分组成,可以参考之前《Linux系统查看CPU使用率的几个命令》这篇文章。
使用cpu_times方法获取cpu的完整信息,如下所示。
>>> psutil.cpu_times() scputimes(user=406604.31, nice=9686.8199999999997, system=664003.88, idle=19646386.609999999, iowait=715788.23999999999, irq=165388.04000000001, softirq=47710.230000000003, steal=0.0, guest=0.0)
获取单个数据,如用户的cpu时间
>>> psutil.cpu_times().user 406604.59999999998
获取cpu物理和逻辑个数,默认logical值为True 。
>>> psutil.cpu_count() 4 >>> psutil.cpu_count(logical=False) 2
内存信息
内存信息的获取主要使用virtual_memory方法。swap使用就用swap_memory方法。
>>> mem=psutil.virtual_memory() >>> mem svmem(total=1047543808L, available=717537280L, percent=31.5, used=1018589184L, free=28954624L, active=441827328, inactive=449007616, buffers=218214400L, cached=470368256) >>> mem.total 1047543808L >>> print (mem.total/8/1024) 127874 >>> print (mem.total/1024/1024) 999
其中percent表示实际已经使用的内存占比,即(1047543808-717537280)/1047543808*100% 。available表示还可以使用的内存。
磁盘信息
磁盘信息主要有两部分,一个是磁盘的利用率,一个是io,他们分别可以通过disk_usage和disk_io_counters方法获取。
如下先获取分区信息,然后看下根分区的使用情况。
>>> psutil.disk_partitions() [sdiskpart(device='/dev/mapper/zhang-root', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='ext2', opts='rw')] >>> psutil.disk_usage('/') sdiskusage(total=43785617408, used=15221456896, free=26339921920, percent=34.799999999999997) >>>
默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上”perdisk=True”参数。
>>> psutil.disk_io_counters() sdiskio(read_count=11722336, write_count=136652693, read_bytes=263345571840, write_bytes=848806625280, read_time=66298670, write_time=2741668730) >>> psutil.disk_io_counters(perdisk=True) {'dm-1': sdiskio(read_count=71443, write_count=102745, read_bytes=292630528, write_bytes=420843520, read_time=684480, write_time=44471270), 'sda5': sdiskio(read_count=5305289, write_count=29095024, read_bytes=131662169088, write_bytes=424404525056, read_time=28226110, write_time=641655840), 'sda2': sdiskio(read_count=2, write_count=0, read_bytes=2048, write_bytes=0, read_time=30, write_time=0), 'dm-0': sdiskio(read_count=6343081, write_count=107455225, read_bytes=131369276416, write_bytes=423983681536, read_time=37361670, write_time=2055542540), 'sda1': sdiskio(read_count=2521, write_count=166, read_bytes=21493760, write_bytes=172032, read_time=26380, write_time=1810)} >>>
网络信息
网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。
>>> psutil.net_io_counters() snetio(bytes_sent=470306251621, bytes_recv=504672135942, packets_sent=1231438305, packets_recv=1243021636, errin=0, errout=0, dropin=0, dropout=0) >>> psutil.net_io_counters(pernic=True) {'lo': snetio(bytes_sent=53311613686, bytes_recv=53311613686, packets_sent=121127899, packets_recv=121127899, errin=0, errout=0, dropin=0, dropout=0), 'eth1': snetio(bytes_sent=209756860205, bytes_recv=193733233062, packets_sent=356636797, packets_recv=391137413, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=207237886306, bytes_recv=257627387945, packets_sent=753674621, packets_recv=730757206, errin=0, errout=0, dropin=0, dropout=0)} >>>
以上是psutil模块获取linux系统基础信息的几个方法,大概常用的数据就这些。当然其他用法还有很多,详情可以参考他的官方文档。
网址:http://pythonhosted.org/psutil/