Python 实时获取Linux服务器信息

在进行服务器监控、运维管理时,实时获取服务器信息至关重要。特别是在 Linux 环境下,我们常常需要获取系统的运行状态、资源占用情况以及硬件信息。如果你是运维人员、开发者或是正在做自动化运维任务的人,那么如何高效地实时获取 Linux 服务器的信息就是你必须掌握的技能。你知道如何使用 Python 来获取这些信息吗?

在 Linux 服务器中,我们经常需要获取诸如 CPU 使用率、内存占用、磁盘空间等实时数据。如何使用 Python 高效地获取这些信息,避免繁琐的手动检查,是很多运维自动化脚本的核心。下面,我们就来看看 Python 是如何做到这一点的。

性能测试中需要关注Linux服务器哪些数据?

在进行 Linux 服务器的性能测试时,需要关注多个关键指标以确保系统能够高效、稳定地运行。以下是一些常见的性能测试指标及其重要性:

Python 提供了强大的库和工具,使得我们能够高效、准确地获取 Linux 服务器的信息

要实现实时获取 Linux 服务器的信息,Python 提供了一些优秀的库,例如 psutilossubprocess。通过这些库,我们可以方便地获取系统的 CPU、内存、磁盘、网络等资源的使用情况。以下是一些常见需求的实现方法。

  1. 使用 psutil 库获取系统信息
    psutil 是一个跨平台的库,用于获取系统和进程的各种信息。通过它,我们可以获取 CPU、内存、磁盘、网络等资源的使用情况。

    安装 psutil 库

    pip install psutil

    获取 CPU 使用率

    import psutil # 获取CPU使用率,默认是获取每秒平均使用率 
    cpu_usage = psutil.cpu_percent(interval=1) print(f"CPU Usage: {cpu_usage}%")

    获取内存使用情况

    memory_info = psutil.virtual_memory() 
    print(f"Memory Usage: {memory_info.percent}%")

    获取磁盘空间使用情况

    disk_info = psutil.disk_usage('/') 
    print(f"Disk Usage: {disk_info.percent}%")

    获取网络接口的状态

    net_info = psutil.net_io_counters() print(f"Bytes Sent: {net_info.bytes_sent}, Bytes Received: {net_info.bytes_recv}")

1. CPU 使用率

用户时间 (User Time): 应用程序实际使用 CPU 的时间。

系统时间 (System Time): 内核和系统调用使用 CPU 的时间。

空闲时间 (Idle Time): CPU 空闲的时间。

等待 I/O 时间 (I/O Wait Time): CPU 等待 I/O 操作完成的时间。

2. 内存使用情况

总内存 (Total Memory): 系统总的物理内存。

已用内存 (Used Memory): 当前正在使用的内存。

可用内存 (Available Memory): 可供新进程使用的内存。

缓存 (Cache): 用于文件系统的缓存。

缓冲区 (Buffers): 用于块设备 I/O 的缓冲区。

交换空间 (Swap Space): 用于虚拟内存的磁盘空间。

交换使用 (Swap Usage): 当前正在使用的交换空间。

3. 磁盘 I/O

读取速率 (Read Rate): 每秒从磁盘读取的数据量。

写入速率 (Write Rate): 每秒写入磁盘的数据量。

IOPS (Input/Output Operations Per Second): 每秒的 I/O 操作次数。

等待队列长度 (Average Queue Length): 平均等待 I/O 操作的请求数。

4. 网络带宽

发送速率 (Send Rate): 每秒发送的数据量。

接收速率 (Receive Rate): 每秒接收的数据量。

网络错误 (Network Errors): 网络传输中的错误数。

丢包率 (Packet Loss): 数据包丢失的比例。

5. 进程信息

进程数 (Number of Processes): 系统中运行的进程数量。

僵尸进程 (Zombie Processes): 已经终止但其父进程尚未回收其资源的进程。

负载平均值 (Load Average): 过去 1 分钟、5 分钟和 15 分钟内的系统负载平均值。

6. 文件系统

挂载点 (Mount Points): 文件系统的挂载点。

使用率 (Usage): 每个挂载点的使用百分比。

剩余空间 (Free Space): 每个挂载点的剩余空间。

7. 系统日志

系统日志 (System Logs): 如 /var/log 目录下的日志文件,记录系统事件和错误信息。

8. 系统启动时间和响应时间

启动时间 (Boot Time): 系统启动所需的时间。

响应时间 (Response Time): 系统对请求的响应时间。

9. 上下文切换 (Context Switches)

上下文切换次数 (Context Switches): 每秒发生的上下文切换次数。

10. 中断 (Interrupts)

中断次数 (Interrupts): 每秒处理的硬件中断次数。

性能测试工具

为了收集这些数据,可以使用多种工具,包括但不限于:

top, htop: 实时查看系统资源使用情况。

vmstat, iostat, mpstat: 统计系统性能数据。

dstat: 多合一系统资源统计工具。

sar (System Activity Reporter): 收集、报告和保存系统活动信息。

nmon (Nigel's Monitor): 实时监控系统性能。

netstat, ss, iptraf, iftop: 网络流量监控。

tcpdump, Wireshark: 网络抓包分析。

iotop, iostat: 磁盘 I/O 监控。

sysdig, strace, ltrace: 系统调用跟踪。

示例命令

以下是一些常用的命令示例,可以帮助你获取上述指标:

# 查看 CPU 使用情况top -b -n 1 | grep "Cpu(s)"# 查看内存使用情况free -h# 查看磁盘 I/Oiostat -x 1 1# 查看网络带宽ifstat 1 1# 查看进程信息ps aux --sort=-%cpu# 查看文件系统使用情况df -h# 查看系统日志tail -f /var/log/syslog# 查看上下文切换和中断vmstat 1 1

以下代码作为辅助,大家如果有兴趣写平台的话,可以用到

python 每1秒获取一次mac电脑的cup、内存、磁盘,并每分钟记录一次数据到指定excel文件中

import psutil
import time
from openpyxl import Workbook
from openpyxl.utils import get_column_letter# 初始化 Excel 工作簿
wb = Workbook()
ws = wb.active
ws.title = "System Monitor"
ws.append(["Timestamp", "CPU (%)", "Memory (%)", "Disk (%)"])
# 记录数据的时间间隔(秒)
record_interval = 60
data_points = []def get_system_info():# 获取 CPU 使用率cpu_percent = psutil.cpu_percent(interval=1)# 获取内存使用情况memory_info = psutil.virtual_memory()memory_percent = memory_info.percent# 获取磁盘使用情况disk_info = psutil.disk_usage('/')disk_percent = disk_info.percentreturn cpu_percent, memory_percent, disk_percentdef record_data_to_excel(data_points):for data_point in data_points:ws.append(data_point)# 计算平均值if data_points:avg_cpu = sum(point[1] for point in data_points) / len(data_points)avg_memory = sum(point[2] for point in data_points) / len(data_points)avg_disk = sum(point[3] for point in data_points) / len(data_points)# 将平均值写入 Excelws.append(["Average", avg_cpu, avg_memory, avg_disk])# 保存 Excel 文件wb.save("system_monitor.xlsx")try:while True:# 获取当前时间戳timestamp = time.strftime("%Y-%m-%d %H:%M:%S")# 获取系统信息cpu_percent, memory_percent, disk_percent = get_system_info()# 打印当前系统信息print(f"Timestamp: {timestamp}, CPU: {cpu_percent}%, Memory: {memory_percent}%, Disk: {disk_percent}%")# 将数据点添加到列表中data_points.append([timestamp, cpu_percent, memory_percent, disk_percent])# 每分钟记录一次数据到 Excel 文件if len(data_points) >= record_interval:record_data_to_excel(data_points)data_points = []  # 清空数据点列表# 等待 1 秒time.sleep(1)
except KeyboardInterrupt:# 如果用户中断程序(例如按 Ctrl+C),保存剩余的数据点if data_points:record_data_to_excel(data_points)print("Monitoring stopped. Data saved to system_monitor.xlsx")

 

代码说明

初始化 Excel 工作簿:

创建一个新的 Excel 工作簿,并设置工作表名称为 "System Monitor"。

在第一行添加列标题。

定义 get_system_info 函数:

使用 psutil 库获取 CPU 使用率、内存使用率和磁盘使用率。

定义 record_data_to_excel 函数:

将数据点列表中的数据写入 Excel 文件。

计算 CPU、内存和磁盘使用率的平均值,并将这些平均值写入 Excel 文件。

保存 Excel 文件。

主循环:

每秒获取一次系统信息并打印。

将获取的数据添加到 data_points 列表中。

当 data_points 列表中的数据点数量达到 60 个时(即每分钟),调用 record_data_to_excel 函数将数据写入 Excel 文件,并清空 data_points 列表。

使用 time.sleep(1) 使程序暂停 1 秒,以实现每秒获取一次数据。

异常处理:

如果用户通过按 Ctrl+C 中断程序,保存剩余的数据点并退出程序。

运行脚本

将上述代码保存到一个 Python 文件中(例如 system_monitor.py),然后在 Linux 终端中运行它:

python3 system_monitor.py

这将开始每秒获取一次系统信息,并每分钟将数据记录到 system_monitor.xlsx 文件中。每分钟结束时,还会计算并记录 CPU、内存和磁盘使用率的平均值。如果需要停止监控,可以按 Ctrl+C。

请确保你有适当的权限来执行脚本,并且安装了所有必需的库。如果遇到任何问题,请告诉我!

以下为代码运行后生成的文件内容

随着企业对自动化运维和实时监控的需求日益增加,如何高效地获取和监控服务器信息成为了 DevOps 及运维工程师的日常工作。Python,作为一门简洁而功能强大的编程语言,已成为开发人员和运维人员自动化管理服务器的首选工具。通过使用 Python 脚本实时获取和分析 Linux 服务器的信息,企业能够更加高效地管理和优化基础设施。

通过 Python,我们能够快速且高效地实时获取 Linux 服务器的信息,从而进行资源监控、性能优化和故障排查。这不仅能大大提高运维效率,也能帮助开发人员在开发阶段及时发现潜在问题,避免后期生产环境中出现突发故障。

“运维的核心是实时,实时的核心是效率;Python,让实时监控变得轻松。” 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502136.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB程序转C# WPF,dll集成,混合编程

工作中遇到一个需求,有一部分算法的代码需要MATLAB来进行处理,而最后需要集成到C#中的wpf项目中去,选择灵活性更高的dll,去进行集成。(可以简单理解为:将MATLAB的函数,变为C#中类的函数成员&…

「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏

本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。 关键词 UI互动应用数字填色动态交互逻辑判断游戏开发 一、功能说明 数字填色小游戏包含以下功能: 数字选择:用户点击…

深入理解 pytest Fixture 方法及其应用

在 Python 自动化测试领域,pytest 是当之无愧的王者。提到 pytest,不得不说它的一大核心功能——Fixture。Fixture 的强大,让复杂的测试流程变得井井有条,让测试代码更加灵活和可复用。 那么,pytest 的 Fixture 究竟是…

【AI编辑器】Cursor与DeepSeek模型的集成:提升开发效率的新选择

目录 一、为什么选择DeepSeek模型 1.1 模型参数与训练 1.2 技术创新 1、FP8格式介绍 2、FP8混合精度训练的优势 3、FP8混合精度训练的技术要点 4、FP8混合精度训练的应用与挑战 1.3 性能表现 1.4 应用与部署 1.5 争议与前景 二、注册DeepSeek账号并获取API Key 三、…

什么情况会导致JVM退出?

大家好,我是锋哥。今天分享关于【什么情况会导致JVM退出?】面试题。希望对大家有帮助; 什么情况会导致JVM退出? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM(Java Virtual Machine)在不同情况下可能会退出&am…

软件工程实验-实验2 结构化分析与设计-总体设计和数据库设计

一、实验内容 1. 绘制工资支付系统的功能结构图和数据库 在系统设计阶段,要设计软件体系结构,即是确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。同时把模块组织成良好的层次系统:顶层模块通过调用它的下层…

《Rust权威指南》学习笔记(三)

泛型和trait 1.泛型可以提高代码的复用能力,泛型是具体类型或其他属性的抽象代替,可以看成是一种模版,一个占位符,编译器在编译时会将这些占位符替换成具体的类型,这个过程叫做“单态化”,所以使用泛型的…

计算机网络基础(7)中科大郑铨老师笔记

应用层 目标:  网络应用的 原理:网络应用协议的概念和实现方面 传输层的服务模型 客户-服务器模式 对等模式(peerto-peer) 内容分发网络  网络应用的 实例:互联网流行的应用层协 议  HTTP  FTP  SMTP / POP3 / IMAP  DNS…

2022浙江大学信号与系统笔记

原视频地址:2022浙江大学信号与系统(含配套课件和代码) - 胡浩基老师-哔哩哔哩 ⭐⭐⭐ 我的笔记:飞书链接 - 信号与系统 基于视频,记得笔记,加了点自己的补充(有的是问 ChatGPT 的)…

数学建模入门——建模流程

摘要:本文介绍了数学建模的一般流程概述。 目录 一、前言 二、数据预处理 三、描述性统计分析 四、模型建立 五、模型评价 一、前言 本文将为想要入门数学建模的同学讲述数学建模的一般流程。但数学建模流程并非一成不变。虽有大致步骤,像分析问题、…

如何使用OpenCV进行抓图-多线程

前言 需求: 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求,之前就有做了,但是由于出现了一个问题,人家摄像头的帧率目前都可以达到60帧/s 了,而我的程序…

NLP CH3复习

CH3 3.1 几种损失函数 3.2 激活函数性质 3.3 哪几种激活函数会发生梯度消失 3.4 为什么会梯度消失 3.5 如何解决梯度消失和过拟合 3.6 梯度下降的区别 3.6.1 梯度下降(GD) 全批量:在每次迭代中使用全部数据来计算损失函数的梯度。计算成本…

01 数据分析介绍及工具准备

数据分析介绍及工具准备 一、工具准备二、下载和使用Anaconda三、jupyter notebook常用快捷键 一、工具准备 数据科学库 NumPy,SciPy,Pandas,Scikit-Learn 数据可视化库 Matplotlib,Seaborn 编译器 Jupyter Notebook 数据科…

机组的概述

计算机系统组成 硬件系统和软件系统 计算机硬件 1.冯诺依曼机基本思想 特点 1.采用“存储程序”工作方式 2.硬件系统由运算器,存储器,控制器,输入输出设备组成 3.指令和数据存在存储器中,形式无区别 4.指令和数据用二进制代…

Windows应用开发-解析MP4视频文件(第1部分)

下载本应用 本Windows应用解析MP4视频文件,以表格的方式显示MP4文件结构。并可以将结果保存到bmp图片。 使用方法 选择“打开MP4视频文件”菜单项,打开MP4文件,就可以获得如下图像: box的每一项,用3个矩形表示&…

Scala_【4】流程控制

第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年,Google 广告领域将迎来一系列显著变化,这些趋势对于提升广告转化率至关重要,值得我们提前关注与布局。 智能化程度持续加深,用户搜索习惯愈发精细,广告格式推陈出新,视频广告势头正猛...那么…

一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理

文章目录 一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理1.TCP建立连接需要3次握手1.1 先讲个你兄弟的故事1.2 TCP 3次握手1.2 TCP 3次握手8件事1.3 TCP握手能不能是两次 2. TCP 断开连接要4次挥手2.1 还回到你兄弟的故事上2.2 TCP 4次挥手2.2 TCP4次挥手4件事2…

基于springboot的课程作业管理系统(源码+数据库+文档)

亲测完美运行带论文:文末获取源码 文章目录 项目简介(论文摘要)运行视频包含的文件列表(含论文)前端运行截图后端运行截图 项目简介(论文摘要) 随着科学技术的飞速发展,社会的方方面…

【ArcGIS微课1000例】0136:制作千层饼(DEM、影像、等高线、山体阴影图层)

文章目录 一、效果展示二、数据准备三、制作过程1. 打开软件2. 制作DEM图层3. 制作影像层4. 制作TIN层5. 制作等高线层四、注意事项一、效果展示 二、数据准备 订阅专栏后,从专栏配套案例数据包中的0136.rar中获取。 1. dem 2. 影像 3. 等高线 4. tin 三、制作过程 1. 打开软…