psutil 是一个跨平台库,可以轻松实现获取系统运行的金岑个系统利用率,包括CPU、内存、磁盘、网络等信息,它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、free等shell
一般咱们获取系统信息每每采用编写shell来实现,如获取当前物理内存总大小缓存
[root@192.168.32.130 ~]$ free -m total used free shared buffers cached Mem: 981 899 81 15 44 149 -/+ buffers/cache: 705 275 Swap: 1983 999 984 [root@192.168.32.130 ~]$
使用python 的psutil库获取更为方便网络
那么psutil 是一个第三方模块,须要安装运维
Windows:socket
pip3 install psutil
函数
Linux:工具
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz --no-check-certificate tar zxvf psutil-3.2.1.tar.gz cd psutil-3.2.1 python3 setup.py install
使用以下:性能
import psutil # 导入psutil模块 mem = psutil.virtual_memory() # 实例化出来mem对象 print(mem) # 查看完整内存信息 print(mem.total) # 查看内存总大小,单位是字节 print(mem.used) # 查看内存使用大小
获取大小以后咱们可使用转换工具进行转换优化
Linux 操做系统的CPU 利用率有如下几个部分:
print(psutil.cpu_times()) # 获取CPU 完整的信息 print(psutil.cpu_times().user) # 获取用户user的cpu时间比 print(psutil.cpu_count()) # 获取CPU 的逻辑个数 print(psutil.cpu_count(logical=False)) # 获取CPU 的物理个数 print(psutil.cpu_percent()) # 获取cpu的使用率 print(psutil.cpu_percent(1))
Linux 操做系统的内存利用率有如下几个部分:
mem = psutil.virtual_memory() # 实例化出来mem对象 print(mem) # 查看完整内存信息 print(mem.total) # 查看内存总大小 print(mem.used) # 查看内存使用大小
在系统磁盘信息中,咱们更加关注磁盘利用率即IO 信息。获取磁盘利用率能够用psutil.disk_usage
方法获取
print(psutil.disk_partitions()) # 获取磁盘完整信息 print(psutil.disk_usage("/")) # 获取分区的使用参数 print(psutil.disk_io_counters()) # 获取磁盘的读写信息
网络信息包括bytes_sent(发送字节数)、接收字节数等
print(psutil.net_io_counters()) # 获取完整的网络信息
除了以上介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登陆、开机时间等信息
print(psutil.users()) # 获取当前登陆系统的用户信息 print(psutil.boot_time()) # 获取开机时间,以时间戳格式返回 import datetime res = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d" "%H:%M:%S") print(res) # 格式化为人们看得懂的时间
获取当前系统进程信息,可让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket链接、线程数等,这些信息能够呈现出指定进程是否存活、资源利用状况,为开发人员的代码优化、问题定位提供良好的数据参考
psutil 获取进程信息
print(psutil.pids()) # 获取全部进程PID,以列表形式返回 p = psutil.Process(9236) # 实例化一个对象,参数为一个进程ID print(p.name()) # 经过name属性能够获得这个进程的名称 print(p.exe()) # 经过exe属性能够获得这个进程的路径 print(p.cwd()) # 经过cwd属性能够进入工做目录绝对路径 print(p.status()) # 经过status属性能够看到这个进程的状态 print(p.create_time()) # 经过create_time属性能够看到这个进程的建立时间,时间戳形式 print(p.uids()) # 经过uids属性能够看到进程的uid信息 print(p.gids()) # 经过gids属性能够看到进程的gid信息 print(p.cpu_times()) # 经过cpu_times能够看到user、system两个cpu的时间 print(p.cpu_affinity()) # 获取cpu亲和度,若是要设置亲和度,将cou号做为参数便可。 print(p.memory_percent()) # 经过memory_percent能够看到进程的内存利用率 print(p.memory_info()) # 经过memory_info能够看到进内存的rss、vms信息 print(p.io_counters()) # 经过io_counters能够看到进程的io信息 print(p.connections()) # 经过connections能够看到进程的socket链接数 print(p.num_threads()) # 经过num_threads能够看到进程开启的线程数
popen的做用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态
from subprocess import PIPE p = psutil.Popen(["python3 psutil_使用.py"],stdout=PIPE) print(p.name()) print(p.username()) print(p.cpu_times)
#!/usr/bin/env python #coding:utf-8 import psutil import datetime import time # 当前时间 now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time())) print(now_time) # 查看cpu物理个数的信息 print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False)) #CPU的使用率 cpu = (str(psutil.cpu_percent(1))) + '%' print(u"cup使用率: %s" % cpu) #查看内存信息,剩余内存.free 总共.total #round()函数方法为返回浮点数x的四舍五入值。 free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2)) total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2)) memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total) print(u"物理内存: %s G" % total) print(u"剩余物理内存: %s G" % free) print(u"物理内存使用率: %s %%" % int(memory * 100)) # 系统启动时间 print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")) # 系统用户 users_count = len(psutil.users()) # # >>> for u in psutil.users(): # ... print(u) # ... # suser(name='root', terminal='pts/0', host='61.135.18.162', started=1505483904.0) # suser(name='root', terminal='pts/5', host='61.135.18.162', started=1505469056.0) # >>> u.name # 'root' # >>> u.terminal # 'pts/5' # >>> u.host # '61.135.18.162' # >>> u.started # 1505469056.0 # >>> 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)) io = psutil.disk_partitions() # print(io) # print("io[-1]为",io[-1]) #del io[-1] print('-----------------------------磁盘信息---------------------------------------') print("系统磁盘信息:" + str(io)) for i in io: o = psutil.disk_usage(i.device) print("总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G") print("已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G") print("可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G") print('-----------------------------进程信息-------------------------------------') # 查看系统所有进程 for pnum in psutil.pids(): p = psutil.Process(pnum) print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 建立时间 %-10s " \ % (p.name(), p.memory_percent(), p.status(), p.create_time())) 硬件信息脚本