1. psutil模块的介绍

    在Python中,我们可以使用psutil这个第三方模块去获取信息的信息。

psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来做系统监控,性能分析,进程管理等。

安装psutil模块也非常简单,在cmd命令行下输入:pip install psutil

  1. psutil模块的使用

    (1)获取CPU信息:

使用psutil.cpu_times()获取CPU的完整信息;

import psutil

psutil.cpu_times()

scputimes(user=1082.5689395, system=1252.5164289000004, idle=10992.4232638, interrupt=93.35099840000001, dpc=41.667867099999995)

使用psutil.cpu_count()获取CPU的逻辑个数;psutil.cpu_count(logical=False)获取CPU的物理个数;默认logical值为True;

psutil.cpu_count()

4

psutil.cpu_count(logical=False)

2

psutil获取系统CPU使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu;

interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率;

for x in range(10):

... psutil.cpu_percent(interval=1)

...

7.4

7.8

8.2

8.6

9.3

8.1

8.0

7.3

9.8

15.8

for x in range(10):

... psutil.cpu_percent(interval=1,percpu=True)

...

[10.9, 11.8, 15.6, 0.0]

[13.8, 3.1, 10.8, 3.1]

[14.1, 8.7, 6.3, 0.0]

[14.1, 9.1, 6.3, 0.0]

[15.6, 8.8, 17.2, 0.0]

[23.4, 3.1, 9.4, 0.0]

[18.7, 9.0, 7.8, 0.0]

[15.6, 9.1, 14.1, 0.0]

[26.6, 0.0, 23.4, 0.0]

[7.8, 9.4, 18.7, 0.0]

(2)获取内存信息:

使用psutil.virtual_memory() 获取系统内存的使用情况;

可以看到,总内存大小是8457662464KB=8 GB,已用4859060224 KB= 4.5 GB,使用了57.5%。剩余内存为3598602240KB=3.5G;

psutil.virtual_memory()

svmem(total=8457662464, available=3598602240, percent=57.5, used=4859060224, free=3598602240)

使用 psutil.swap_memory()获取系统交换内存的统计信息;

psutil.swap_memory()

sswap(total=16913375232, used=5444091904, free=11469283328, percent=32.2, sin=0, sout=0)

(3)获取磁盘信息:

使用 psutil.disk_partitions() 获取磁盘分区的信息;

使用psutil.disk_usage('/')获取磁盘的使用情况;

使用psutil.disk_io_counters() 获取磁盘的IO统计信息(读写速度等);

psutil.disk_partitions()

[sdiskpart(device='C:\', mountpoint='C:\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\', mountpoint='D:\', fstype='NTFS', opts='rw,fixe

d'), sdiskpart(device='E:\', mountpoint='E:\', fstype='NTFS', opts='rw,fixed')]

psutil.disk_usage('/')

sdiskusage(total=119821824000, used=60241117184, free=59580706816, percent=50.3)

psutil.disk_io_counters()

sdiskio(read_count=207246, write_count=87647, read_bytes=5948826624, write_bytes=5090843648, read_time=745, write_time=252)

(4)获取网络信息:

使用psutil.net_io_counters()获取总的网络IO信息

psutil.net_io_counters()

snetio(bytes_sent=3398615, bytes_recv=14170744, packets_sent=28431, packets_recv=25604, errin=0, errout=255, dropin=0, dropout=0)

使用 psutil.net_io_counters(pernic=True)获取网卡的IO信息

psutil.net_io_counters(pernic=True)

{'Npcap Loopback Adapter': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), '本地连接': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), '无线网络连接': snetio(bytes_sent=3397477, by

tes_recv=14170950, packets_sent=24199, packets_recv=24613, errin=0, errout=255, dropin=0, dropout=0)}

使用 psutil.net_if_addrs() 获取网络接口信息

psutil.net_if_addrs()

{'Npcap Loopback Adapter': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='02-00-4C-4F-4F-50', netmask=None, broadcast=None, ptp=None), snicadd

r(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>

, address='::1', netmask=None, broadcast=None, ptp=None)], '本地连接': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='FC-45-96-7F-7E-9E', netm

ask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.64.227', netmask='255.255.0.0', broadcast=None, ptp=

None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::9594:8742:c758:40e3', netmask=None, broadcast=None, ptp=None)]}

使用psutil.net_if_stats()获取网络接口状态信息

psutil.net_if_stats()

{'本地连接': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), 'VMware Network Adapter VMnet1': snicstats(isup=True, du

plex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500), 'VMware Network Adapter VMnet8': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>

, speed=100, mtu=1500), 'Loopback Pseudo-Interface 1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1073, mtu=1500), 'Npcap Loopb

ack Adapter': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=10, mtu=1500), '无线网络连接': snicstats(isup=True, duplex=<NicDuplex.

NIC_DUPLEX_FULL: 2>, speed=4294, mtu=1500), 'isatap.{53D15CD1-4A3F-4911-9824-DC7F561E0DFA}': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL:

2>, speed=0, mtu=1280)}

(5)获取其他系统信息:

获取系统的开机时间,并转化为自然的格式

psutil.boot_time()

1551576293.0

import datetime

datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S")

'2019-03-03 09: 24: 53'

获取连接系统的用户列表:

psutil.users()

[suser(name='Lenovo', terminal=None, host='0.0.0.0', started=1551576310.0, pid=None)]

获取系统全部的进程信息:

psutil.pids()

[0, 4, 404, 632, 728, 736, 796, 832, 844, 852, 948, 648, 848, 1032, 1056, 1180, 1260, 1364, 1412, 1436, 1576, 1692, 1736, 1868, 1964, 1464, 1460, 2176

, 2224, 2248, 2312, 2400, 2464, 2508, 2576, 2672, 2732, 2776, 2820, 2940, 2460, 3276, 3396, 3540, 4000, 2164, 1880, 3600, 4076, 4588, 4608, 4916, 4924

, 4972, 5316, 6000, 6284, 7040, 6844, 7132, 6976, 5268, 4148, 7476, 7776, 8188, 4084, 2688, 5088, 6352, 9036, 8560, 7784, 8436, 8448, 8284, 8228, 9196

, 9192, 2984, 1988, 8392, 7724, 1844, 3232, 2188, 7984, 4288, 4268, 7916, 9468, 3308]

获取单个进程的信息:

p=psutil.Process(1988)#获取指定进程ID=1988

p.name() #进程名

'vmware.exe'

p.exe #进程的bin路径

<bound method Process.exe of psutil.Process(pid=1988, name='vmware.exe', started='09:48:13')>

p.cwd() #进程的工作目录绝对路径

'E:\soft_file\VMWARE'

p.cmdline() #进程启动的命令行

['E:\soft_file\VMWARE\vmware.exe']

p.ppid() #父进程ID

4972

p.parent() #父进程

psutil.Process(pid=4972, name='DesktopMgr64.exe', started='09:25:21')

p.children() # 子进程列表

[psutil.Process(pid=7724, name='vmware-tray.exe', started='09:48:18'), psutil.Process(pid=1844, name='vmware-unity-helper.exe', started='09:48:25')]

p.status() # 进程状态

'running'

p.username() #进程的用户名

'Lenovo-PC\Lenovo'

p.create_time() # 进程创建的时间

1551577693.0

p.cpu_times() # 进程使用的CPU时间

pcputimes(user=6.552042, system=6.3804409, children_user=0.0, children_system=0.0)

p.memory_info() # 进程使用的内存

pmem(rss=122986496, vms=96821248, num_page_faults=131494, peak_wset=133181440, wset=122986496, peak_paged_pool=529816, paged_pool=488896, peak_nonpage

d_pool=97656, nonpaged_pool=89240, pagefile=96821248, peak_pagefile=107077632, private=96821248)

p.num_threads() # 进程的线程数量

17

p.threads() # 所有线程信息

[pthread(id=8792, user_time=6.021638599999999, system_time=5.7876370999999995), pthread(id=8528, user_time=0.031200199999999997, system_time=0.0312001

99999999997), ....]

p.terminate()# 结束进程

psutil模块使用(系统监控,性能分析,进程管理)的更多相关文章

  1. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  2. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  3. 系统级性能分析工具 — Perf

    从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找. perf Performance analysis tools for Linux. Perf ...

  4. 系统级性能分析工具 — Perf【转】

    转自:https://blog.csdn.net/zhangskd/article/details/37902159 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn ...

  5. Swoole 源码分析——进程管理 Swoole_Process

    前言 swoole-1.7.2 增加了一个进程管理模块,用来替代 PHP 的 pcntl 扩展. PHP自带的pcntl,存在很多不足,如 pcntl 没有提供进程间通信的功能 pcntl 不支持重定 ...

  6. Nmon监控性能分析

    一.CPU信息 1.折线图中蓝线为cpu占有率变化情况:粉线为磁盘IO的变化情况: 2.下面表各种左边的位磁盘的总体数据,包括如下几个: Avg tps during an interval 每个间隔 ...

  7. Nmon 监控性能分析

    一.CPU 信息 1.折线图中蓝线为 cpu 占有率变化情况:粉线为磁盘 IO 的变化情况: 2.下面表各种左边的位磁盘的总体数据,包括如下几个: Avg tps during an interval ...

  8. Linux自带-系统级性能分析工具 — Perf(转)

    https://blog.csdn.net/zhangskd/article/details/37902159/

  9. Linux系统监视资源与进程管理

    Linux 系统中时刻运行着许多的进程,如果能够合理的管理它们,有益于系统性能的优化, 系统进程总共有五种不同的状态: 命令一:ps命令,用于查看系统中进程状态 格式:ps [参数] 查看进程与状态: ...

  10. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

随机推荐

  1. 01_Typora学习

    Typora学习 使用Typora 编辑器 一. 标题 一个#后加空格表示一级标题(快捷键Ctrl+1) 两个#后加空格表示二级标题(快捷键Ctrl+2) 以此类推,目前最多到六级标题(快捷键Ctrl ...

  2. loam详细代码解析与公式推导

    loam详细代码解析与公式推导(基础理论知识) 一.基础坐标变换 loam中欧拉角解算都采用R P Y 的解算方式,即先左乘R, 再左乘P, 最后左乘Y,用矩阵表示为: R = Ry * Rp * R ...

  3. Node.js(六)MongoDB

    student.js var express = require('express'); var router = express.Router(); const _=require("lo ...

  4. 分布式存储系统之Ceph集群状态获取及ceph配置文件说明

    前文我们了解了Ceph的访问接口的启用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16727620.html:今天我们来聊一聊获取ceph集群状态和 ...

  5. 如何在IDEA中创建Module、以及怎样在IDEA中删除Module?

    文章目录 1.为何要使用Module? 2.Module的创建 3.如何从硬盘上删除module 1.为何要使用Module? 目前主流的大型项目都是分布式部署的,结构类型这种多Module结构.不同 ...

  6. 上传数据、下载模板文件解决方案(前端:antd;后端:.Net Core WebAPI)

    一.Excel 模板下载 通过静态文件下载. 将模板文件放在根目录的 public 文件夹下备用. 下载事件方法如下:(通过临时生成一个 a 标签,触发后再移除) downLoadExcelModel ...

  7. XAF新手入门 - 前言

    很多小伙伴在第一次接触XAF时,会被它的丰富功能及开箱即用的特点所吸引,即使在不了解XAF的情况下,也能够依葫芦画瓢创建一个功能丰富的应用,但当应用到实际项目中时,你会发现与之前的愿景差距很大,很多都 ...

  8. etcd定时任务脚本执行失败

    etcd定时任务脚本执行失败 报错如下:etcdctl命令不存在 是因为在脚本中etcdctl命令没有写绝对路径,修改标记部分改成绝对路径 可以先获取路径然后改成绝对路径问题解决 which etcd ...

  9. 微信支付v3接口的 官方 Java SDK

    啰嗦几句:微信支付v3版接口麻烦吗?在对接微信支付v3接口时,本来是一件很简单的事情,其实微信支付v3接口并不是很复杂,但是微信团队的管理很混乱,给我们开发者带来了巨大的麻烦. 微信支付v3版接口对接 ...

  10. ElasticSearch这些坑记得避开

    目录 一.管理方式 二.结构维护 三.数据调度 1.同步方案 2.中断和恢复 四.刷新策略 五.深度分页 六.参考源码 Index用不好,麻烦事不会少: 一.管理方式 ElasticSearch作为最 ...