4.1 开源库监控库psutil
4.1.1 psutil介绍
psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。
它主要应用于信息监控,分析和限制系统资源及进程的管理。它实现了同等命令命令行工具提供的功能,如:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的linux、windows、OS X、FreeBSD和Sun Solaris等操作系统。
4.1.2 psutil提供的功能函数
psutil.cpu_count() #查看CPU核数
psutil.cpu_count(logical=False) #查看CPU物理个数
psutil.cpu_percent() #查看CPU使用率
psutil.cpu_percent(percpu=True) #查看每个CPU的使用率
psutil.cpu_times() #查看CPU时间分配情况
psutil.boot_time() #查看开机时间
psutil.virtual_memory() #查看内存信息
psutil.disk_partitions() #查看所有分区信息
psutil.net_io_counters() #查看网络流量与收发包信息
psutil.users() #查看当前登录用户信息
例如:
#!/usr/bin/python3
import psutil
print(psutil.cpu_count()) #查看CPU核数
print(psutil.cpu_count(logical=False)) #查看CPU物理个数
print(psutil.cpu_percent()) #查看CPU使用率
print(psutil.cpu_percent(percpu=True)) #查看每个CPU的使用率
print(psutil.cpu_times()) #查看CPU时间分配情况
运行结果为:
root@liu-ubuntu:~# ./16-psutil.py
1
1
0.0
[0.0]
scputimes(user=92.49, nice=9.3, system=59.65, idle=15944.3, iowait=12.81, irq=0.0, softirq=1.55, steal=0.0, guest=0.0, guest_nice=0.0)
4.1.3 psutil进程管理
>>> import psutil #引入psutil包
>>> psutil.pids() #查看当前所有进程id
[1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 33, 34, 76, 77, 78, 79, 80, 81, 84, 88, 113, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 254, 255, 259, 260, 283, 284, 320, 331, 448, 613, 778, 781, 792, 808, 811, 814, 816, 821, 824, 828, 838, 839, 841, 881, 885, 886, 892, 898, 919, 928, 931, 943, 1000, 1018, 1019, 1027, 1190, 1197, 1209, 1227, 1242, 1249, 1252, 1259, 1266, 1273, 1277, 1281, 1286, 1295, 1301, 1304, 1308, 1319, 1329, 1331, 1342, 1353, 1367, 1393, 1405, 1409, 1414, 1423, 1424, 1428, 1432, 1438, 1440, 1442, 1445, 1452, 1458, 1486, 1487, 1496, 1533, 1549, 1552, 1553, 1555, 1557, 1574, 1582, 1590, 1595, 1613, 1620, 1625, 1632, 1654, 1669, 1674, 1685, 1699, 1732, 1739, 1743, 1751, 1798, 1800, 1811, 1874, 1890, 1926, 4809, 6206, 6315, 6383]
>>> p = psutil.Process(6383) #获取指定id的进程
>>> p.name() #进程名
'python3'
>>> p.username() #查看创建该进程的用户名
'root'
>>> p.cmdline() #查看该进程对应的exe文件
['python3']
>>> p.cwd() #当前路径
'/root'
>>> p.exe() #exe文件的位置
'/usr/bin/python3.6'
>>> p.cpu_affinity() #该进程CPU占用情况(运行在哪个CPU上)
[0]
>>> p.num_threads() #该进程包含的线程数量
1
>>> p.threads() #该进程所有线程对象
[pthread(id=6383, user_time=0.16, system_time=0.08)]
>>> p.status() #进程状态
'running'
>>> p.is_running()
True