python自动化运维笔记(1)-系统性能信息模块psutil

1.1 获取系统性能信息

  psutil是一个跨平台库,能够获取系统运行进程和系统利用率等信息。通常我们采用shell命令来获取操作系统信息。而使用psutil库实现则更加简单明了。psutil大小单位一般采用字节。

首先,我们需要导入psutil模块,这里我使用的是源码安装的方式

[root@foundation8 mode]# wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificate
[root@foundation8 mode]# tar zxf psutil-2.0.0.tar.gz
[root@foundation8 mode]# cd psutil-2.0.0/
[root@foundation8 psutil-2.0.0]# /usr/local/python3.6/bin/python3.6 setup.py install #依据个人路径不同而使用,如果使用的是系统自带python,则使用的命令是python setup.py install

接下来简单运用一下psutil模块获取内存总大小和已使用内存大小

[root@foundation8 psutil-2.0.0]# /usr/local/python3.6/bin/python3.6
Python 3.6.6 (default, Jan 11 2019, 20:41:06) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(8251170816, 2561019904)
>>> 

获取CPU信息

使用psutil.cpu_time()可以非常容易的获取cpu信息

>>> import psutil
>>> psutil.cpu_times()  #获取CPU时间比的完整信息
scputimes(user=548.82, nice=4.68, system=93.55, idle=20803.62, iowait=141.13, irq=0.0, softirq=0.3, steal=0.0, guest=0.0, guest_nice=0.0)
>>> psutil.cpu_times().user #获取用户的cpu时间比
549.0
>>> psutil.cpu_count()   #获取cpu逻辑个数
4
>>> psutil.cpu_count(logical=False)   #获取cpu物理个数
1

获取内存信息

>>> import psutil
>>> mem = psutil.virtual_memory() 
>>> mem      #获取内存完整信息
svmem(total=8251170816, available=6551605248, percent=20.6, used=2895740928, free=5355429888, active=1655226368, inactive=760700928, buffers=2015232, cached=1194160128)
>>> mem.total  #获取内存总数
8251170816
>>> mem.free   #获取空闲内存数
5355429888
>>> psutil.swap_memory()  #获取交换分区信息
sswap(total=8321495040, used=0, free=8321495040, percent=0.0, sin=0, sout=0)

获取磁盘信息

>>> psutil.disk_usage('/')  #查看分区使用情况
sdiskusage(total=97931100160, used=67410419712, free=30520680448, percent=68.8)
>>> psutil.disk_io_counters()  #查看io个数和读写信息
sdiskio(read_count=85385, write_count=20870, read_bytes=2565561344, write_bytes=674280448, read_time=1909692, write_time=6600784)
>>> psutil.disk_io_counters(perdisk=True)  获取每个分区的IO个数以及读写信息
{'sda1': sdiskio(read_count=606, write_count=2, read_bytes=1472000, write_bytes=1024, read_time=4036, write_time=16), 'sda2': sdiskio(read_count=54, write_count=0, read_bytes=663552, write_bytes=0, read_time=1795, write_time=0), 'sda3': sdiskio(read_count=121, write_count=0, read_bytes=937984, write_bytes=0, read_time=1194, write_time=0), 'sda4': sdiskio(read_count=120, write_count=0, read_bytes=933888, write_bytes=0, read_time=1284, write_time=0), 'sda5': sdiskio(read_count=120, write_count=0, read_bytes=933888, write_bytes=0, read_time=1352, write_time=0), 'sda6': sdiskio(read_count=120, write_count=0, read_bytes=933888, write_bytes=0, read_time=1715, write_time=0), 'sda7': sdiskio(read_count=160, write_count=10, read_bytes=5304832, write_bytes=2134016, read_time=1984, write_time=1724), 'sda8': sdiskio(read_count=41256, write_count=9273, read_bytes=1277387264, write_bytes=336674816, read_time=907578, write_time=2602389), 'dm-0': sdiskio(read_count=42700, write_count=11687, read_bytes=1275900416, write_bytes=336674816, read_time=986914, write_time=3998461), 'dm-1': sdiskio(read_count=128, write_count=0, read_bytes=1093632, write_bytes=0, read_time=1840, write_time=0), 'loop0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0)}

获取网络信息

>>> import psutil
>>> psutil.net_io_counters()
snetio(bytes_sent=1857184, bytes_recv=32646422, packets_sent=12501, packets_recv=60845, errin=0, errout=0, dropin=0, dropout=0)

获取开机时间

>>> import psutil
>>> import datetime
>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
'2019-04-28 10:38:13'

1.2 系统进程管理方法

       psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息

>>> import psutil
>>> psutil.pids()  #获取所有进程ID
[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 27, 28, 29, 30, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 53, 56, 58, 60, 80, 82, 116, 302, 304, 305, 307, 308, 309, 310, 318, 328, 329, 350, 351, 391, 392, 403, 404, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 504, 521, 526, 542, 559, 578, 603, 613, 620, 621, 622, 623, 657, 672, 673, 674, 675, 676, 677, 678, 679, 697, 701, 702, 718, 719, 720, 724, 725, 726, 728, 741, 742, 743, 750, 752, 753, 754, 755, 757, 760, 774, 817, 1276, 1277, 1278, 1287, 1289, 1293, 1294, 1300, 1315, 1376, 1390, 1401, 1463, 1465, 1478, 1485, 1492, 1493, 1560, 1565, 1657, 1680, 1685, 1687, 1704, 1713, 1731, 1749, 1754, 1755, 1757, 1763, 1772, 1819, 1830, 1861, 1866, 1868, 1874, 1877, 1879, 1885, 1890, 1896, 1900, 1905, 1940, 1967, 1972, 1980, 1986, 1991, 1992, 2008, 2009, 2011, 2014, 2020, 2024, 2041, 2144, 2150, 2253, 2327, 2328, 2381, 2432, 2978, 2985, 2986, 3033, 3036, 3197, 3214, 3751, 3940, 4192, 4193, 4194, 4195, 4196, 4282, 5144, 5339, 5340, 5487, 5498, 5509, 5527, 5528, 5531, 5585, 5608, 5629, 5638, 5661]
>>> p=psutil.Process(1300)  
>>> p.name()    #查看进程号为1300的进程名
'sshd'
>>> p.exe()     #进程bin路径
'/usr/sbin/sshd'
>>> p.cwd()     #进程工作目录
'/'
>>> p.status()  #进程状态
'sleeping'
>>> p.create_time()  #进程创建时间
1556419123.22
>>> p.uids(),p.gids()  #进程uid,gid信息
(puids(real=0, effective=0, saved=0), pgids(real=0, effective=0, saved=0))
>>> p.cpu_times()  #进程CPU的时间信息
pcputimes(user=0.0, system=0.0)
>>> p.memory_percent()   #进程的内存利用率
0.015785977881760047
>>> p.memory_info()      #进程的内存信息,包括常驻内存(rss)和虚拟内存(vms)
pmem(rss=1302528, vms=84447232)
>>> p.io_counters()    #进程的IO信息
pio(read_count=3, write_count=2, read_bytes=0, write_bytes=0)
>>> p.num_threads()    #进程开启的线程数
1

发布了124 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lm236236/article/details/89634614
今日推荐