Python使用psutil模块监控系统资源详解
本文介绍如何利用Python的psutil第三方库简化系统监控工作。通过示例代码展示如何获取CPU核心数、内存及交换分区使用情况、系统启动时间、当前进程信息及磁盘容量等关键指标。psutil支持Linux、Windows等多平台,是运维人员自动化监控的实用工具。
本文详细解析了在Python中调用psutil模块的具体过程,文中提供了详细的示例代码,对读者的学习或实际工作具有参考价值,建议相关从业者参考阅读。
Python系统监控方案对比
使用Python编写脚本以简化日常运维工作是Python的重要应用场景之一。在Linux环境下,系统提供了ps、top、free等命令来实时监控系统运行状态。虽然Python可以通过subprocess模块调用这些命令并解析结果,但这种方式往往需要编写大量解析代码,显得较为繁琐。
psutil模块优势与特性
在Python中获取系统信息的另一种高效方法是使用psutil第三方模块。正如其名称所示,psutil代表process and system utilities(进程与系统工具)。它不仅允许用户通过简短的代码实现系统监控功能,还具备跨平台兼容性,支持Linux、UNIX、OSX以及Windows等多种操作系统,因此成为系统管理员和运维人员不可或缺的工具。
具体实现代码如下所示:
文件名为oshelper.py。
系统资源监控代码示例
#encoding=utf-8
import psutil
import datetime
#查看cpu的信息
print u"CPU 个数 %s"%psutil.cpu_count()
print u"物理CPU个数 %s"%psutil.cpu_count(logical=False)
print u"CPU uptimes"
print psutil.cpu_times()
print ""
#查看内存信息
mem = psutil.virtual_memory()
print u"系统总内存 %s G"%(mem.total/1024/1024/1024)
print u"系统可用内存 %s G"%(mem.available/1024/1024/1024)
mem_rate = int(mem.available)/float(mem.total)
print u"系统内存使用率 %s %%"%int(mem_rate*100)
#交换分区
swapmem = psutil.swap_memory()
print u"交换分区 %s G"%(swapmem.total/1024/1024/1024)
print u"交换分区可用 %s G"%(swapmem.free/1024/1024/1024)
print u"交换分区使用率 %s %%"%int(swapmem.percent)
#系统启动时间
print u"系统启动时间 %s"%datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
#系统用户
users_count = len(psutil.users())
users_list = ",".join([ u.name for u in psutil.users()])
print u"当前有%s个用户,分别是%s"%(users_count, users_list)
#网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print u"网卡接收流量 %s 网卡发送流量 %s"%(bytes_rcvd, bytes_sent)
nis=psutil.net_io_counters(pernic=True)
print u"网卡 " ,tuple(nis)
#进程 进程的各种详细参数
def show_process(pid):
try:
p = psutil.Process(pid)
p.name() #进程名
#p.exe() #进程的bin路径
#p.cwd() #进程的工作目录绝对路径
p.status() #进程状态
p.create_time() #进程创建时间
#p.uids() #进程uid信息
#p.gids() #进程的gid信息
p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
#p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
p.memory_percent() #进程内存利用率
p.memory_info() #进程内存rss,vms信息
p.io_counters() #进程的IO信息,包括读写IO数字及参数
#p.connectios() #返回进程列表
p.num_threads() #进程开启的线程数
'''
听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
from subprocess import PIPE
p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
'''
p.name()
#p.username()
except:
pass
'''
pids=psutil.pids()
for pid in pids:
show_process(pid)
'''
with open (r'd:\temp\test.txt','w') as f:
sys.stdout=f
for proc in psutil.process_iter():
'''
if proc.name() == "w3wp.exe":
cpu_threshold=proc.cpu_percent(interval=2)/24
print proc.name(),proc.create_time(),cpu_threshold
p.terminate() proc .kill()
Iterate over all ports this process is listening to
for con in proc.get_connections():
con
'''
pa=proc.as_dict()
print pa.get('name'),pa.get('create_time'),pa.get('pid'),pa.get('status'),pa.get('connections'),pa.get('open_files'),pa.get('cpu_percent'),pa.get('memory_percent'),pa.get('username'),pa.get('num_threads')
print u"当前进程:",psutil.Process(os.getpid()).cmdline()
#磁盘 磁盘的使用量等等
dps=psutil.disk_partitions()
for dp in dps:
dp
du=psutil.disk_usage('/')
print u"硬盘总共容量 %s G"%(du.total/1024/1024/1024)
print u"硬盘可用 %s G"%(du.free/1024/1024/1024)
print u"硬盘已用 %s %%"%(du.percent)
以上是本文的全部内容,希望能为读者的学习带来帮助,同时也欢迎大家对本站给予支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









