1. 程式人生 > 其它 >psutil模組使用(系統監控,效能分析,程序管理)

psutil模組使用(系統監控,效能分析,程序管理)

  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()# 結束程序