您的位置:首页 > 编程语言 > Python开发

Python自动化运维笔记(一):系统性能信息模块psutil

2017-09-30 22:27 856 查看
运行环境:Python3.6,Windwos10 RS1,Pycharm2017.2

前言

最近开始接触
Python
自动化运维,网上有不少教学资源可以供我们相对系统地去学习。而我是使用的优秀运维工程师刘天斯所著《Python自动化运维-技术与最佳实践》一书,博文中的大部分笔记也是摘抄自这本书,另外会有自己平时学习的一些总结,写成笔记原因有三:

让自己学会总结,学会去分析问题

加深一下印象,以后遇到类似的问题可以方便回顾,毕竟自己的笔记是最适合自己的

运维初学者,连菜鸟都算不上,但也希望将自己的经验分享给大家

关于系统信息模块
psutil

psutil
库能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。主要用于系统监控,分析和限制系统资源进程的管理。目前支持32位和64位的
Linux
Windows
OSX
(现在改名为
MacOS
,苹果家桌面系统),
FreeBSD
SunSolaris
等操作系统。

现在时间是2017年9月30日,在网上查询到的版本信息,该模块可以支持
Python2.4
到目前最新的
Python3.6
版本。

因为现在最常用的
Python2.7
Python3.6
都内置了
pip
软件管理工具,所以我们可以直接使用以下指令进行安装

pip install psutil


值得一提的是如果同时安装了
Python2
Python3
,则如果需要安装到
Python3
上应该执行如下命令:

pip3 install psutil


获取系统信息

Linux
shell
中我们通常使用如下指令来获取物理内存
total
值和物理内存
uesed
的值:

[root@CentOS ~]# free -m | grep Mem | awk '{print $2,$3}'   #物理内存total值\物理内存uesed值
1006 143




然而在使用
psutil
库时更加简单明了。

>>> import psutil
>>> mem = psutil.virtual_memory()
>>> mem.total       # 物理内存total值,单位为字节
6336098304
>>> mem.used        # 物理内存uesed值,单位为字节
3943735296


获取CPU信息

psutil.cpu_times()      # 获取CPU相关的完整信息
scputimes(user=21465.578125, system=19666.59375, idle=287203.375, interrupt=910.59375, dpc=436.75000190734863)
psutil.cpu_times().user # 获取单项信息
21475.96875
psutil.cpu_count()      # 获取CPU的逻辑个数,默认参数logical = True
4
psutil.cpu_count(logical = False)   # 获取CPU的物理个数
2


获取内存信息

>>> psutil.virtual_memory()     # 获取内存完整信息
svmem(total=6336098304, available=1639055360, percent=74.1, used=4697042944, free=1639055360)
>>> psutil.swap_memory()        # 获取swap分区相关信息,其实就是相当于我们Windows上说的虚拟内存(个人理解)
sswap(total=7342731264, used=5996646400, free=1346084864, percent=81.7, sin=0, sout=0)


获取其它相关信息

>>> psutil.disk_partitions()        # 获取磁盘完整信息
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='', opts='cdrom'), sdiskpart(device='H:\\', mountpoint='H:\\', fstype='', opts='removable')]
# -------------------------------------------------------------
>>> psutil.disk_io_counters()       # 获取磁盘总的IO个数、读写信息
sdiskio(read_count=1416268, write_count=1952341, read_bytes=59678343168, write_bytes=60500517888, read_time=503151605, write_time=1266966502)
# -------------------------------------------------------------
>>> psutil.net_io_counters()        # 获取网络总的IO信息
snetio(bytes_sent=22999076, bytes_recv=853131051, packets_sent=323119, packets_recv=592483, errin=0, errout=0, dropin=0, dropout=0)
# --------------------------------------------------------------
>>> psutil.users()                  # 获取当前用户登录信息
[suser(name='imwoo', terminal=None, host='0.0.0.0', started=1506702487.0, pid=None)]


系统进程管理

通过获取系统进程信息,我们可以得知应用程序运行状态。在
psutil
模块中,我们可以很方便的通过
psutil.pid()
来获取进程
PID(Progress ID)
,使用
psutil.Process()
来获取耽搁进程的相关信息。

>>> import psutil
>>> psutil.pids()   # 获取当前进程的所有PID
[0, 4, 368, 532, 644, 720, 728, 840, 864, 884, 956, 716, 1132, 1180, 1188, 1280, 1344, 1432, 1516, 1548, 1568, 1620, 1696, 1756, 1788, 1812, 1876, 2052, 2060, 2124, 2132, 2140, 2284, 2356, 2376, ......]


针对当前系统某一进程具体分析,写这篇博文我正好在听歌,用的是网易云音乐,在任务管理器中查看了一下进程
PID
为9340,所以我就直接用这个来进行分析了。

import psutil

progress = psutil.Process(9340)     # 当前我电脑网易云音乐的PID为9340

print('进程名:%s' % progress.name())
print('进程路径:%s' % progress.exe())
print('进程工作绝对路径:%s' % progress.cwd())
print('进程状态:%s' % progress.status())
print('内存利用率:%d' % progress.memory_percent())
print('还有很多相关信息...')


运行结果:

进程名:cloudmusic.exe

进程路径:C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe

进程工作绝对路径:C:\Program Files (x86)\Netease\CloudMusic

进程状态:running

内存利用率:0

还有很多相关信息…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: