• python之系统性能信息模块psutil


    系统性能信息模块psutil

    • 跨平台库
    • 轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。
    • 主要用于系统监控,分析和限制系统资源及进程的管理
    • 实现同等命令行工具提供的功能(ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice, iostat、iotop、uptime、pidof、tty、taskset、pmap)等

    源码安装步骤

    # wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificate
    # tar -xzvf psutil-2.0.0.tar.gz
    # cd psutil-2.0.0.tar.gz
    # python setup.py install
    

    备注:在执行最后一步安装时可能出现如下报错

    .....
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    .....
    

    我上网查了一下,先安装下面这个包就ok了

    sudo apt-get install python-dev
    

    获取系统性能信息

    采集系统的基本性能信息包括CPU、内存、磁盘、网络等,可以完整描述当前系统的运行状态和质量。

    获取CPU信息

    Linux操作系统的CPU利用率有以下几部分:

    • User Time:执行用户进程的时间百分比
    • System Time:执行内核进程和中断的时间百分比
    • Wait IO:由于IO等待使CPU处于idle(空闲)状态的时间百分比
    • Idle:CPU处于idle状态的时间百分比

    使用psutil.cpu_times()方法可以非常简单的得到这些信息,同时也可获取CPU的硬件相关信息,比如CPU的物理个数和逻辑个数

    >>> import psutil
    >>> psutil.cpu_times()	#获取CPU完整信息,若需要显示所有逻辑CPU信息,指定方法变量percpu=True即可,如psutil.cpu_times(percpu=True)
    scputimes(user=23434.91, nice=113.03, system=9915.3, idle=3431610.53, iowait=2935.88, irq=0.0, softirq=104.9, steal=0.0, guest=0.0, guest_nice=0.0)
    >>> psutil.cpu_times().user
    23437.62
    >>> psutil.cpu_count()
    8
    >>> psutil.cpu_count(logical=False)
    1
    

    获取内存信息

    Linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等

    具体使用如下:

    >>> psutil.virtual_memory()
    svmem(total=8246726656L, available=5614632960L, percent=31.9,used=5847158784L, free=2399567872L, active=3703824384, inactive=1726611456, buffers=276090880L, cached=2938974208)
    >>> mem=psutil.virtual_memory()
    >>> mem
    svmem(total=8246726656L, available=5613244416L, percent=31.9, used=5848616960L, free=2398109696L, active=3704242176, inactive=1726664704, buffers=276090880L, cached=2939043840)
    >>> mem.percent
    31.9
    >>> mem.free
    2398109696L
    >>> swap=psutil.virtual_memory()
    >>> swap
    svmem(total=8246726656L, available=5645967360L, percent=31.5, used=5819650048L, free=2427076608L, active=3671724032, inactive=1730355200, buffers=276090880L, cached=2942799872)
    

    获取磁盘信息

    1.磁盘完整信息:psutil.disk_partitions()

    >>> psutil.disk_partitions()
    [sdiskpart(device='/dev/sda2', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot/efi', fstype='vfat', opts='rw')]
    

    2.磁盘利用率:psutil.disk_usage('磁盘name')

    >>> psutil.disk_usage('/')
    sdiskusage(total=975513235456, used=26903121920, free=899033231360, percent=2.8)
    

    3.磁盘IO信息:psutil.disk_io_counters()

    • read_count(读IO数)
    • write_count(写IO数)
    • read_bytes(IO读字节数)
    • write_bytes(IO写字节数)
    • read_time(磁盘读时间)
    • write_time(磁盘写时间)
    >>> psutil.disk_io_counters()	#获取磁盘IO个数、读写信息
    sdiskio(read_count=52288, write_count=829577, read_bytes=1680531456, write_bytes=31535281152, read_time=704980, write_time=7189056)
    >>> psutil.disk_io_counters().write_count	
    829611
    >>> psutil.disk_io_counters(perdisk=True)	#此参数获取单个分区IO个数、读写信息
    省略
    

    获取网络信息

    系统的网络信息与磁盘IO类似(psutil.net_io_counters()),涉及以下几个关键点:

    • bytes_sent(发送字节数)
    • bytes_recv(接收字节数)
    • packets_sent(发送数据包数)
    • packets_recv(接收数据包数)等
    >>> psutil.net_io_counters()
    snetio(bytes_sent=242647738, bytes_recv=591544314, packets_sent=1455844, packets_recv=1779176, errin=0, errout=0, dropin=0, dropout=0)
    >>> psutil.net_io_counters(pernic=True)
    {'lo': snetio(bytes_sent=17429720, bytes_recv=17429720, packets_sent=217121, packets_recv=217121, errin=0, errout=0, dropin=0, dropout=0), 'docker0': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=225221972, bytes_recv=574119442, packets_sent=1238756, packets_recv=1562090, errin=0, errout=0, dropin=0, dropout=0)}
    

    其他系统信息

    psutil模块还支持获取用户登录、开机时间等信息,操作如下:

    >>> psutil.users()
    [suser(name='ruanyang', terminal=':0', host=':0', started=1473233792.0), suser(name='ruanyang', terminal='pts/14', host=':0', started=1473237248.0)]
    >>> psutil.boot_time()
    1473233706.0
    >>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
    '2016-09-07 15:35:06'
    

    系统进程管理方法

    功能:获取进程信息,得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等
    作用:这些信息可呈现出指定进程是否存活、资源利用情况,为开发人员的代码优化、问题定位提供更好的数据参考

    获取进程信息

    psutil.pids():获取所有进程的PID
    psutil.Process():获取单个进程的名称、路径、状态、系统资源利用率等信息

    >>> psutil.pids()				#列出所有进程的Pid
    [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28]
    >>> p=psutil.Process(1)			#实例化一个Process对象,参数为一进程的PID
    >>> p.name()					#进程名
    'init'
    >>> p.exe()						#进程bin路径
    '/sbin/init'
    >>> p.cwd()						#进程工作目录绝对路径
    '/'
    >>> p.status()					#进程状态
    'sleeping'
    >>> p.create_time()				#进程创建时间,时间戳格式
    1473233706.04
    >>> p.uids()					#进程uid信息
    puids(real=0, effective=0, saved=0)
    >>> p.gids()					#进程gid信息
    pgids(real=0, effective=0, saved=0)
    >>> p.cpu_times()				#进程CPU时间信息,包括user、system两个CPU时间
    pcputimes(user=0.6, system=0.74)
    >>> p.cpu_affinity()			#get进程CPU亲和度,若要设置进程CPU亲和度,将CPU号作为参数即可
    [0, 1, 2, 3, 4, 5, 6, 7]
    >>> p.memory_percent()			#进程内存利用率
    0.05473434719357334
    >>> p.memory_info()				#进程内存rss、vms信息
    pmem(rss=4513792, vms=34713600)
    >>> p.io_counters()				#进程IO信息,包括读写IO数及字节数
    pio(read_count=2174812, write_count=973346, read_bytes=754508288, write_bytes=2169106432)
    >>> p.connections()				#返回打开进程socket的namedutples列表,包括fs、family、laddr等信息
    []
    >>> p.num_threads()				#进程开启的线程数
    1
    

    popen类的使用

    >>> p=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE)
    >>> p.name()
    'python'
    >>> p.username()
    'root'
    >>> p.communicate()
    ('hello
    ', None)
    

    学习书本:《Python自动化运维技术与最佳实践》--刘天斯
    本文为原创,若转载,请注明出处,谢谢

  • 相关阅读:
    Win10下配置Java 环境变量
    css background之设置图片为背景技巧
    让一个图片在div中居中(四种方法)
    js判断是否联网
    css 设置 checkbox复选框控件的对勾√样式
    CSS 实现对号效果
    关于input 的选中,自定义input[type="checkbox"]样式
    前端图片压缩上传(纯js的质量压缩,非长宽压缩)
    vscode: Visual Studio Code 常用快捷键
    Content:"2715",特殊字符和图标
  • 原文地址:https://www.cnblogs.com/cherishry/p/5886607.html
Copyright © 2020-2023  润新知