如何用 sysinfo 在 5 分钟内构建系统监控工具
如何用 sysinfo 在 5 分钟内构建系统监控工具【免费下载链接】sysinfoCross-platform library to fetch system information项目地址: https://gitcode.com/gh_mirrors/sy/sysinfo想要快速构建跨平台的系统监控工具吗sysinfo 是一个强大的 Rust 库让你在 5 分钟内就能获取详细的系统信息无论你是开发系统管理工具、性能监控应用还是需要实时查看系统状态sysinfo 都能提供全面的解决方案。 sysinfo 是什么sysinfo 是一个跨平台的 Rust 库专门用于获取系统信息。它支持包括 Linux、macOS、Windows、Android、iOS、FreeBSD、NetBSD 和 Raspberry Pi 在内的多种操作系统让你用统一的 API 访问CPU 信息核心数、使用率、频率、品牌内存状态总内存、可用内存、使用情况、交换空间磁盘信息磁盘列表、使用情况、类型进程管理运行中的进程、资源使用、信号发送网络监控接口状态、数据传输统计系统组件温度传感器等硬件信息用户和组系统用户和组信息 快速开始5分钟搭建监控工具第一步添加依赖在你的Cargo.toml中添加 sysinfo 依赖[dependencies] sysinfo 0.38第二步基础监控代码创建一个简单的系统监控程序只需要几行代码use sysinfo::{System, Disks, Networks, Components}; fn main() { // 创建系统实例并更新所有信息 let mut sys System::new_all(); sys.refresh_all(); // 显示系统基本信息 println!(系统名称: {:?}, System::name()); println!(内核版本: {:?}, System::kernel_version()); println!(主机名: {:?}, System::host_name()); println!(正常运行时间: {} 秒, System::uptime()); // 内存使用情况 println!(总内存: {} MB, sys.total_memory() / 1024 / 1024); println!(已用内存: {} MB, sys.used_memory() / 1024 / 1024); println!(可用内存: {} MB, sys.available_memory() / 1024 / 1024); // CPU 信息 println!(CPU 核心数: {}, sys.cpus().len()); println!(总 CPU 使用率: {:.1}%, sys.global_cpu_usage()); // 列出所有进程 println!(运行中的进程:); for (pid, process) in sys.processes() { println!( PID {}: {} (内存: {} KB), pid, process.name().to_string_lossy(), process.memory() / 1024); } } 核心功能详解实时 CPU 监控想要实时监控 CPU 使用率sysinfo 提供了简单的方法use sysinfo::{System, MINIMUM_CPU_UPDATE_INTERVAL}; use std::thread; let mut sys System::new(); loop { sys.refresh_cpu_usage(); for (i, cpu) in sys.cpus().iter().enumerate() { println!(CPU {}: {:.1}%, i, cpu.cpu_usage()); } thread::sleep(MINIMUM_CPU_UPDATE_INTERVAL); }进程管理和监控查看和管理系统进程变得异常简单use sysinfo::{System, Pid}; let mut sys System::new_all(); sys.refresh_all(); // 按名称查找进程 let chrome_processes sys.processes_by_name(chrome); for process in chrome_processes { println!(Chrome 进程: PID{}, 内存{}MB, process.pid(), process.memory() / 1024 / 1024); } // 获取特定进程信息 if let Some(process) sys.process(Pid::from(1234)) { println!(进程状态: {:?}, process.status()); println!(CPU 使用率: {}%, process.cpu_usage()); println!(启动时间: {:?}, process.start_time()); }磁盘和网络监控监控磁盘空间和网络流量同样简单use sysinfo::{Disks, Networks}; // 磁盘信息 let disks Disks::new_with_refreshed_list(); for disk in disks { println!(磁盘: {}, 类型: {:?}, 总空间: {}GB, 可用: {}GB, disk.name().to_string_lossy(), disk.kind(), disk.total_space() / 1024 / 1024 / 1024, disk.available_space() / 1024 / 1024 / 1024); } // 网络信息 let networks Networks::new_with_refreshed_list(); for (interface, data) in networks { println!(接口 {}: 接收 {} MB, 发送 {} MB, interface, data.total_received() / 1024 / 1024, data.total_transmitted() / 1024 / 1024); } 性能优化技巧1. 重用 System 实例避免重复创建 System 实例因为很多信息需要基于之前的数据计算// ✅ 正确做法 - 重用实例 let mut sys System::new_all(); loop { sys.refresh_all(); // 处理数据 std::thread::sleep(std::time::Duration::from_secs(1)); } // ❌ 错误做法 - 每次创建新实例 loop { let sys System::new_all(); // 性能差 // 处理数据 std::thread::sleep(std::time::Duration::from_secs(1)); }2. 选择性刷新数据只刷新你需要的信息以提高性能let mut sys System::new(); // 只刷新内存信息 sys.refresh_memory(); // 只刷新特定进程 sys.refresh_processes(sysinfo::ProcessesToUpdate::All, false); // 只刷新 CPU 信息 sys.refresh_cpu_usage(); 实际应用场景场景 1系统健康监控面板创建一个实时显示系统状态的 Web 面板或 CLI 工具监控CPU 和内存使用率磁盘空间警告关键进程状态网络流量统计场景 2自动化运维脚本使用 sysinfo 编写自动化脚本检测高内存使用进程并重启监控磁盘空间并发送警报记录系统性能指标到数据库场景 3开发调试工具在开发过程中监控应用资源使用内存泄漏检测CPU 性能分析文件描述符监控️ 高级功能跨平台兼容性sysinfo 自动处理不同操作系统的差异// 在所有支持的平台上都能正常工作 if sysinfo::IS_SUPPORTED_SYSTEM { // 安全地使用平台特定功能 let components Components::new_with_refreshed_list(); for component in components { println!(组件: {}, 温度: {}°C, component.label(), component.temperature()); } }序列化支持通过启用serde功能可以轻松序列化系统信息[dependencies] sysinfo { version 0.38, features [serde] } serde_json 1.0use sysinfo::System; use serde_json; let mut sys System::new_all(); sys.refresh_all(); // 序列化为 JSON let json serde_json::to_string(sys).unwrap(); println!(系统信息 JSON: {}, json); 源码结构参考sysinfo 的源码组织清晰便于理解src/lib.rs - 主库入口和公共 APIsrc/common/ - 跨平台通用结构定义src/unix/ - Unix 系统实现Linux、macOS 等src/windows/ - Windows 系统实现examples/simple.rs - 完整示例程序 注意事项及时刷新数据大多数信息需要调用refresh_*方法获取最新状态最小更新间隔CPU 使用率需要至少MINIMUM_CPU_UPDATE_INTERVAL的间隔文件描述符限制在 Linux 上如果需要更多文件描述符可以调用sysinfo::set_open_files_limit(0)虚拟环境限制Docker 和 WSL 中可能无法获取完整的硬件信息 总结sysinfo 让系统监控变得前所未有的简单无论你是 Rust 新手还是有经验的开发者都能在 5 分钟内构建出功能强大的监控工具。它的跨平台支持、丰富的 API 和优秀的性能使其成为 Rust 生态中系统信息获取的首选库。现在就开始使用 sysinfo为你的应用添加专业的系统监控功能吧记住保持 System 实例重用、选择性刷新数据、利用跨平台特性你就能构建出高效可靠的监控解决方案。【免费下载链接】sysinfoCross-platform library to fetch system information项目地址: https://gitcode.com/gh_mirrors/sy/sysinfo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考