linux psutil 监控,psutil:系统监测与进程管理
簡介
psutil (process and system utilities的縮寫) 是一個跨平臺的Python庫,可以獲取到運行中的進程信息和系統狀態(比如CPU,內存,磁盤,網絡,傳感器),主要用于系統監測,進程資源的分析和限制,進程管理等。
psutil 實現了很多UNIX命令工具的功能,諸如: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap.
psutil 支持的操作系統涵蓋了現在的主流: Linux, Windows, OSX, FreeBSD, OpenBSD, NetBSD, Sun Solaris, AIX. psutil 實現了對多種操作系統的統一接口封裝,但有些方法和屬性僅對特定操作系統有意義。
完整的文檔可參考ReadTheDocs,這里只做Python庫的簡單介紹。
安裝pip install psutil
示例
諸如CPU,內存,磁盤,網絡,硬件信息等常見的系統狀態,psutil通通都可以監測到。下面是一些代碼示例,僅僅展示了全部功能中的一部分。
CPU# -*- coding: utf-8 -*-
import psutil
print(psutil.cpu_times())
print(psutil.cpu_times(percpu=True))
'''
各模式的cpu時間消耗:
scputimes(user=26364.73, nice=0.0, system=14061.69, idle=261071.34)
每個cpu,各模式的cpu時間消耗:
[scputimes(user=10182.09, nice=0.0, system=6139.7, idle=59054.21), ...]
'''
print(psutil.cpu_times_percent(interval=1))
print(psutil.cpu_times_percent(interval=1, percpu=True))
'''
各模式cpu時間占比:
scputimes(user=2.2, nice=0.0, system=0.7, idle=97.0)
每個cpu,各模式的cpu占比:
[scputimes(user=5.0, nice=0.0, system=3.0, idle=92.0), ...]
'''
print(psutil.cpu_count())
print(psutil.cpu_count(logical=False))
'''
CPU的個數(邏輯上的): 4
CPU的個數(物理上的): 2
'''
print(psutil.cpu_stats())
'''
上下文切換,硬件中斷,軟件中斷,系統調用次數:
scpustats(ctx_switches=7943, interrupts=189022, soft_interrupts=141954044, syscalls=292696)
'''
print(psutil.cpu_freq())
'''
cpu頻率(當前/最大/最小),僅Linux, OSX, Windows支持:
scpufreq(current=1300, min=1300, max=1300)
'''
Memory# -*- coding: utf-8 -*-
import psutil
print(psutil.virtual_memory())
'''
內存使用狀況:
svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712,
active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)
'''
print(psutil.swap_memory())
'''
swap使用狀況:
sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
'''
磁盤# -*- coding: utf-8 -*-
import psutil
print(psutil.disk_partitions())
'''
磁盤分區信息:
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),
sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw')]
'''
print(psutil.disk_usage('/'))
'''
磁盤使用狀況:
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
'''
print(psutil.disk_io_counters(perdisk=False))
'''
磁盤I/O:
sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032,
write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166,
write_merged_count=812396, busy_time=4523412)
'''
網絡# -*- coding: utf-8 -*-
import psutil
print(psutil.net_io_counters(pernic=True))
'''
每個網卡的I/O統計信息:
{'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564,
packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567,
packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
'''
print(psutil.net_connections())
'''
網絡連接情況(主要是TCP連接):
[sconn(fd=115, family=, type=,
laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91',
port=80), status='ESTABLISHED', pid=1254),
sconn(fd=117, family=, type=,
laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80),
status='CLOSING', pid=2987),
...]
'''
print(psutil.net_if_addrs())
'''
網絡地址信息:
{'wlan0': [snic(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
snic(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
snic(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
'''
print(psutil.net_if_stats())
'''
網卡狀態:
{'eth0': snicstats(isup=True, duplex=, speed=100, mtu=1500),
'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536)}
'''
傳感器(硬件信息)# -*- coding: utf-8 -*-
import psutil
print(psutil.sensors_temperatures())
'''
各硬件溫度,僅Linux支持:
{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0),
shwtemp(label='Core 1', current=52.0, high=100.0, critical=100.0),
shwtemp(label='Core 2', current=45.0, high=100.0, critical=100.0),
shwtemp(label='Core 3', current=47.0, high=100.0, critical=100.0)]}
'''
print(psutil.sensors_fans())
'''
硬件風扇信息,僅Linux支持:
{'asus': [sfan(label='cpu_fan', current=3200)]}
'''
print(psutil.sensors_battery())
'''
電池信息,僅Linux, Windows, FreeBSD支持:
sbattery(percent=93, secsleft=16628, power_plugged=False)
'''
其他系統信息# -*- coding: utf-8 -*-
import psutil
print(psutil.users())
'''
登錄用戶:
[suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),
suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]
'''
print(psutil.boot_time())
'''
開機時間: 1365519115.0
'''
進程管理
對進程的管理是psutil的一大模塊,這里只挑選了極少數的例子。更多例子請參考GitHub上的例子。
# -*- coding: utf-8 -*-
import psutil
p = psutil.Process(7055)
print(p.name())
print(p.exe())
print(p.cmdline())
print(p.status())
print(p.cpu_times())
'''
對應輸出:
'python'
'/usr/bin/python'
['/usr/bin/python', 'main.py']
'running'
pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1)
'''
print(p.nice()) # get進程優先級
p.nice(10) # set進程優先級
More
文檔與更多示例參考:
其他擴展
Diamond是一個python寫的守護程序,它可以收集系統指標(cpu, 內存, 網絡,I/O, 負載, 硬盤指標), 并把它們發送至Graphite或其它后端。此外,通過它可以實現自定義的收集器,采集你想要的任何資源指標。
考慮到現在有Prometheus等更加大眾的解決方案,這里就稍微提及而已。
總結
以上是生活随笔為你收集整理的linux psutil 监控,psutil:系统监测与进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三相桥式全控整流电路
- 下一篇: 打造木纹画效果