psutil模块学习--进程和系统监控工具

介绍

我们可以通过topfreeiostatps等命令获取服务器的内存、CPU、网络、进程等信息。Python可以通过使用subprocess模块去执行命令获取这些信息,不过需要写额外的解析代码。
psutil库提供这些系统信息,psutil = process and system utilities,可以跨平台使用获取CPU、内存、磁盘、网络、传感器等信息。
可以通过pip install psutil来安装该模块。

简单使用

下面代码可以在windows上运行,也可以在linux上运行

# -*- coding:UTF-8 -*-

"""
psutil使得Python程序获取系统信息变得易如反掌。

psutil还可以获取用户信息、Windows服务等很多有用的系统信息,具体请参考psutil的官网:https://github.com/giampaolo/psutil
"""

import psutil
import os
import sys
from pprint import pprint

# 获取CPU信息
cpu_ct = psutil.cpu_count()
print("逻辑CPU个数:", cpu_ct)
cpu_pysical_ct = psutil.cpu_count(logical=False)
print("物理CPU个数:", cpu_pysical_ct)
print("根据上面的结果可推出其超线程数是:", int(cpu_pysical_ct / cpu_ct))

cpu_times = psutil.cpu_times()
print("统计CPU的用户/系统/空闲时间", cpu_times)

# 等价于 top -n 3 -d 5
for i in range(3):
    # 获取CPU使用百分比信息
    cpu_percent = psutil.cpu_percent(interval=5, percpu=False)
    print(cpu_percent)

# 获取内存信息
virtual_memory = psutil.virtual_memory()
# 物理内存
print("virtual_memory:", virtual_memory)
swap_memory = psutil.swap_memory()
# 交换内存
print("swap_memory:", swap_memory)

# 获取磁盘信息
disk_partitions = psutil.disk_partitions()
pprint(disk_partitions)
# 获取磁盘的使用情况,需要指定磁盘的挂载目录
disk_usage = psutil.disk_usage("/")
print(disk_usage)
# 获取磁盘IO统计数据 如果指定perdisk=True则返回每个磁盘的统计数据
disk_io_counters = psutil.disk_io_counters(perdisk=True)
print(disk_io_counters)

# 获取网络信息
net_io_counters = psutil.net_io_counters()
# 获取网络读写字节/包的个数
print(net_io_counters)
# 获取网络接口信息
net_if_addrs = psutil.net_if_addrs()
pprint(net_if_addrs)
# 获取网络接口状态
net_if_stats = psutil.net_if_stats()
pprint(net_if_stats)
# 获取当前网络连接信息
net_connections = psutil.net_connections()
pprint(net_connections)

# 获取进程信息
# 返回的是进程id的列表
pids = psutil.pids()
print("当前运行的进程个数:", len(pids))
# 获取当前进程id
p = psutil.Process(os.getpid())
print("进程名: ", p.name())
print("进程exe绝对路径: ", p.exe())
print("进程工作目录: ", p.cwd())
print("进程启动的命令行: ", p.cmdline())
print("父进程id: ", p.ppid())
print("父进程: ", p.parent())
print("子进程列表: ", p.children(recursive=False))
print("进程状态: ", p.status())
print("进程所属用户: ", p.username())
print("进程启动时间戳: ", p.create_time())
from datetime import datetime
datetime.fromtimestamp(p.create_time())

# 判断是linux才查看进程终端,windows上会报错
if sys.platform == "linux":
    print("进程终端: ", p.terminal())
print("进程使用的CPU时间: ", p.cpu_times())
print("进程使用的内存: ", p.memory_info())
# 进程使用的内存:  pmem(rss=77926400, vms=1930043392, shared=5652480, text=2482176, lib=0, data=1716023296, dirty=0)
#  ============================================================
# | FIELD  | DESCRIPTION                         | AKA  | TOP  |
#  ============================================================
# | rss    | resident set size                   |      | RES  |
# | vms    | total program size                  | size | VIRT |
# | shared | shared pages (from shared mappings) |      | SHR  |
# | text   | text ('code')                       | trs  | CODE |
# | lib    | library (unused in Linux 2.6)       | lrs  |      |
# | data   | data + stack                        | drs  | DATA |
# | dirty  | dirty pages (unused in Linux 2.6)   | dt   |      |
#  ============================================================

print("进程打开的文件: ", p.open_files())
print("进程相关网络连接: ", p.connections())
print("进程的线程数量: ", p.num_threads())
# 所有线程信息
pprint(p.threads())
print("进程环境变量: ", p.environ())

# 模拟ps效果
psutil.test()

# 结束进程
print("即将自动结束进程")
p.terminate()

在这里插入图片描述
在这里插入图片描述

进阶和参考网址

更多详细的信息可以参考psutil官网
廖雪峰老师Python教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值