Python中运维神器Psutil的用法详解

 更新时间:2025年02月20日 09:50:22   作者:aiweker  
Python的开源库psutil为我们提供了一个强大的工具,能够轻松获取和分析系统利用率的信息,下面就跟随小编一起深入了解一下它的具体使用吧

一、引言

在现代服务器运维中,监控和管理系统资源是至关重要的。Python的开源库psutil为我们提供了一个强大的工具,能够轻松获取和分析系统利用率(CPU、内存、磁盘、网络等)的信息。本文将带领大家从入门到进阶,全面了解psutil在服务器运维方面的主要功能和应用场景,并提供相应的代码示例和解释。

二、psutil在服务器运维方面的主要功能和应用场景

1.系统监控

psutil能够获取系统的实时进程信息,包括进程数、CPU使用率、内存使用情况等,这对于监控系统性能和资源利用率非常有用。

2.资源管理

通过psutil,可以轻松地获取和管理系统资源,如CPU、内存、磁盘和网络接口。这对于优化系统性能、排查资源瓶颈以及进行资源调度非常有帮助。

3.性能测试

在进行性能测试时,psutil可以提供详细的系统级数据,帮助开发者分析应用程序的性能表现,从而进行针对性的优化。

4.故障排查

当系统出现问题时,psutil可以帮助快速定位问题所在。例如,通过查看CPU使用率异常高的进程,可以迅速发现潜在的硬件或软件故障。

5.自动化脚本

psutil库可以简化自动化脚本的编写,使得开发者能够更方便地执行系统级别的操作。例如,可以编写脚本自动关闭占用大量资源的进程。

6.游戏服务器管理和容器化环境监控

psutil还可以用于游戏服务器的性能指标监控,以及Docker、Kubernetes等容器化环境中的资源使用情况监控。

三、psutil功能代码示例及解释

1. 系统监控

代码示例:

import psutil

# 获取CPU使用率
cpu_usage = psutil.cpu_percent()
print(f"CPU使用率: {cpu_usage}%")

# 获取内存使用情况
memory_info = psutil.virtual_memory()
print(f"内存总量: {memory_info.total / (1024 ** 3):.2f} GB")
print(f"内存已用: {memory_info.used / (1024 ** 3):.2f} GB")
print(f"内存可用: {memory_info.available / (1024 ** 3):.2f} GB")
print(f"内存使用率: {memory_info.percent}%")

# 获取磁盘使用情况
disk_info = psutil.disk_usage('/')
print(f"磁盘总量: {disk_info.total / (1024 ** 3):.2f} GB")
print(f"磁盘已用: {disk_info.used / (1024 ** 3):.2f} GB")
print(f"磁盘可用: {disk_info.free / (1024 ** 3):.2f} GB")
print(f"磁盘使用率: {disk_info.percent}%")

解释:

  • psutil.cpu_percent():获取当前CPU使用率。
  • psutil.virtual_memory():获取内存使用情况,返回一个包含内存总量、已用内存、可用内存和使用率等信息的命名元组。
  • psutil.disk_usage('/'):获取根目录所在磁盘的使用情况,返回一个包含磁盘总量、已用磁盘、可用磁盘和使用率等信息的命名元组。

2. 资源管理

代码示例:

import psutil

# 获取所有进程信息
processes = psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent'])
for proc in processes:
    print(proc.info)

# 获取特定进程信息(以PID为1的进程为例)
pid = 1
proc = psutil.Process(pid)
print(f"进程ID: {proc.pid}")
print(f"进程名称: {proc.name()}")
print(f"CPU使用率: {proc.cpu_percent(interval=1)}%")
print(f"内存使用率: {proc.memory_percent()}%")

解释:

  • psutil.process_iter():遍历系统中的所有进程,并返回每个进程的指定信息。
  • psutil.Process(pid):通过进程ID获取特定进程的信息。

3. 性能测试与故障排查

代码示例:

import psutil
import time

# 监控CPU使用率变化
print("开始监控CPU使用率...")
for i in range(10):
    cpu_usage = psutil.cpu_percent(interval=1)
    print(f"CPU使用率: {cpu_usage}%")
    time.sleep(1)

# 查找CPU使用率最高的进程
highest_cpu_proc = max(psutil.process_iter(['pid', 'name', 'cpu_percent']), key=lambda p: p.info['cpu_percent'])
print(f"CPU使用率最高的进程: PID={highest_cpu_proc.info['pid']}, 名称={highest_cpu_proc.info['name']}, 使用率={highest_cpu_proc.info['cpu_percent']}%")

解释:

psutil.cpu_percent(interval=1):获取CPU在指定时间间隔(1秒)内的使用率变化。

max(psutil.process_iter(['pid', 'name', 'cpu_percent']), key=lambda p: p.info['cpu_percent']):查找CPU使用率最高的进程。

4. 自动化脚本示例

代码示例:

import psutil

# 编写一个自动关闭CPU使用率超过80%的进程的脚本
def close_high_cpu_processes():
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
        if proc.info['cpu_percent'] > 80:
            print(f"关闭进程: PID={proc.info['pid']}, 名称={proc.info['name']}, 使用率={proc.info['cpu_percent']}%")
            proc.terminate()  # 终止进程
            proc.wait(timeout=3)  # 等待进程终止,超时为3秒
            if proc.is_running():
                proc.kill()  # 强制终止进程close_high_cpu_processes()

解释:

  • psutil.process_iter(['pid', 'name', 'cpu_percent']):遍历系统中的所有进程,并获取每个进程的PID、名称和CPU使用率。
  • proc.terminate():终止指定进程。
  • proc.wait(timeout=3):等待进程终止,如果超时则继续执行后续操作。
  • proc.kill():强制终止指定进程。

四、进阶应用

游戏服务器管理

使用psutil监控游戏服务器的性能指标,如帧率、延迟等,确保游戏在不同负载下都能保持良好的运行效果。

容器化环境监控

在Docker、Kubernetes等容器化环境中,使用psutil监控容器和宿主机的资源使用情况,帮助管理员进行资源分配和调度。

五、总结

本文详细介绍了psutil在服务器运维方面的主要功能和应用场景,包括系统监控、资源管理、性能测试、故障排查、自动化脚本编写以及特定领域(如游戏服务器管理和容器化环境)的应用。

到此这篇关于Python中运维神器Psutil的用法详解的文章就介绍到这了,更多相关Python Psutil内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python学习_几种存取xls/xlsx文件的方法总结

    Python学习_几种存取xls/xlsx文件的方法总结

    今天小编就为大家分享一篇Python学习_几种存取xls/xlsx文件的方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python实现区间合并的方法

    python实现区间合并的方法

    区间合并是指将重叠的区间合并为一个或多个不重叠的区间,本文主要介绍了python实现区间合并的方法,文中通过代码介绍的很详细,感兴趣的可以了解一下
    2024-02-02
  • Python中的数据分析详解

    Python中的数据分析详解

    这篇文章主要介绍了Python中的数据分析详解,对数据进行分析,数据分析是指根据分析目的,用适当的统计分析方法及工具,对收集来的数据进行处理与分析,提取有价值的信息,发挥数据的作用,需要的朋友可以参考下
    2023-07-07
  • python Pygame的具体使用讲解

    python Pygame的具体使用讲解

    本篇文章主要介绍了python Pygame的具体使用讲解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 关于python之字典的嵌套,递归调用方法

    关于python之字典的嵌套,递归调用方法

    今天小编就为大家分享一篇关于python之字典的嵌套,递归调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 分享四个python接口常用封装函数

    分享四个python接口常用封装函数

    这篇文章主要给大家分享的是分享四个python接口常用封装函数,文章基于python的相关资料展开详细的内容介绍,需要的小伙伴可以参考一下
    2022-04-04
  • 利用Python监控设备电池电量并发送通知

    利用Python监控设备电池电量并发送通知

    在日常使用电子设备时,及时了解电池电量状态并进行合理充电是非常重要的,本文将使用Python进行设备电池电量的监控并发送通知,有需要的可以了解下
    2025-03-03
  • python实现神经网络感知器算法

    python实现神经网络感知器算法

    这篇文章主要为大家详细介绍了python实现神经网络感知器算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python中的作用域==和is的区别及说明

    Python中的作用域==和is的区别及说明

    这篇文章主要介绍了Python中的作用域==和is的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • python杀死一个线程的方法

    python杀死一个线程的方法

    由于python线程没有提供abort方法,所以我们需要自己想办法解决此问题,面对这一问题,小编帮大家解决phthon杀死一个线程的方法,需要的朋友一起来学习吧
    2015-09-09

最新评论