OSHI 介绍与使用
OSHI 介绍
OSHI(Operating System and Hardware Information)是一个开源的Java库,用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问,且不依赖于平台特定的API,能够在多种操作系统上(如Windows、Linux、macOS)无缝运行。OSHI的主要目标是简化系统信息的获取,减少开发者的工作量,尤其是在需要获取硬件和操作系统信息的情况下。
OSHI的主要功能
-
操作系统信息(Operating System)
- 获取操作系统的名称、版本、架构、内核版本、系统类型等。
- 访问操作系统的系统资源使用情况,如负载、运行时信息等。
-
硬件信息(Hardware)
- 提供硬件抽象层(Hardware Abstraction Layer,HAL),可以访问和查询系统的硬件设备信息,如CPU、内存、硬盘、网络接口等。
- CPU信息:如CPU型号、核心数、线程数等。
- 内存信息:如总内存、已使用内存、剩余内存等。
- 磁盘信息:磁盘型号、存储容量、已用空间等。
- 网络接口信息:获取网络接口的名字、MAC地址、IP地址等。
-
传感器信息(Sensors)
- 获取温度、风扇速度、CPU温度等传感器数据(在支持的平台上)。
-
传输和IO统计(IO and Transports)
- 提供I/O操作的统计信息,如读写操作次数、字节数等。
- 获取网络传输数据量(输入和输出)以及数据包统计。
-
系统性能指标(System Performance Metrics)
- 提供系统负载、CPU使用率、内存使用率等性能指标。
OSHI的核心模块
OSHI的设计通过“硬件抽象层”(Hardware Abstraction Layer)来简化访问不同硬件组件的过程。其核心组件主要分为几个模块,每个模块负责不同的系统信息。
1. SystemInfo
SystemInfo类是获取系统和硬件信息的主要入口。它是OSHI库的核心类,包含了对操作系统和硬件的访问。通过它,你可以访问到操作系统、硬件、传感器和性能等信息。- 示例代码:
SystemInfo systemInfo = new SystemInfo(); OperatingSystem os = systemInfo.getOperatingSystem(); // 获取操作系统信息 HardwareAbstractionLayer hardware = systemInfo.getHardware(); // 获取硬件信息
2. OperatingSystem
OperatingSystem类提供有关操作系统的信息,如操作系统的名称、版本、体系结构、内核版本等。- 示例代码:
OperatingSystem os = systemInfo.getOperatingSystem(); String osName = os.toString();
3. HardwareAbstractionLayer
HardwareAbstractionLayer(简称HAL)是OSHI的硬件信息接口,它封装了CPU、内存、磁盘、网络接口等硬件信息的获取方法。- 示例代码:
HardwareAbstractionLayer hardware = systemInfo.getHardware(); CentralProcessor processor = hardware.getProcessor();
4. CentralProcessor
CentralProcessor类用于获取CPU的信息,如核心数、线程数、处理器标识、处理器型号、CPU的负载等。- 示例代码:
CentralProcessor processor = hardware.getProcessor(); String cpuName = processor.getProcessorIdentifier().getName(); int cpuCores = processor.getLogicalProcessorCount();
5. Memory
Memory类提供有关系统内存的信息,如总内存、可用内存、已使用内存等。- 示例代码:
GlobalMemory memory = hardware.getMemory(); long totalMemory = memory.getTotal(); long availableMemory = memory.getAvailable();
6. Disks
Disk类提供关于存储设备的信息,如磁盘的容量、已用空间、磁盘名称等。- 示例代码:
List<OSDisk> disks = hardware.getDiskStores(); for (OSDisk disk : disks) {System.out.println("Disk: " + disk.getName() + " Size: " + disk.getSize()); }
7. NetworkInterfaces
NetworkInterfaces类提供关于网络接口的信息,如IP地址、MAC地址、接口名称、流量统计等。- 示例代码:
List<NetworkIF> networkIFs = hardware.getNetworkIFs(); for (NetworkIF net : networkIFs) {System.out.println("Interface: " + net.getName() + " IP: " + net.getIPv4addr()); }
使用OSHI的常见场景
-
系统监控
- 获取系统负载、内存使用情况、CPU使用率等性能数据,帮助你监控服务器或工作站的状态。
-
硬件信息查询
- 获取关于计算机硬件的详细信息,如CPU型号、内存大小、磁盘空间等,这对于自动化部署、资产管理等非常有用。
-
性能调优
- 收集系统性能数据,帮助进行性能分析和调优。
-
服务器监控工具
- OSHI可以作为构建自定义服务器监控工具的基础,结合其他工具和库进行深度集成。
示例代码:获取系统信息
下面是一个完整的例子,展示如何使用OSHI获取操作系统、CPU和内存信息:
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OperatingSystem;public class OSHIExample {public static void main(String[] args) {// 创建OSHI的SystemInfo实例SystemInfo systemInfo = new SystemInfo();// 获取操作系统信息OperatingSystem os = systemInfo.getOperatingSystem();System.out.println("OS: " + os);// 获取硬件信息HardwareAbstractionLayer hardware = systemInfo.getHardware();// 获取CPU信息CentralProcessor processor = hardware.getProcessor();System.out.println("CPU: " + processor.getProcessorIdentifier().getName());System.out.println("CPU Cores: " + processor.getLogicalProcessorCount());// 获取内存信息long totalMemory = hardware.getMemory().getTotal();System.out.println("Total Memory: " + totalMemory / 1024 / 1024 + " MB");}
}
支持的平台
OSHI支持多种操作系统,包括但不限于:
- Windows
- Linux
- macOS
- FreeBSD
- Solaris
OSHI通过统一的API,简化了跨平台的硬件和操作系统信息获取,使其在不同平台上表现一致。
OSHI使用
在Spring Boot项目中使用OSHI(Operating System and Hardware Information)库,通常是为了获取有关操作系统、硬件、内存、CPU等系统资源的详细信息。OSHI是一个开源的Java库,可以帮助你在Java应用程序中获取操作系统和硬件的详细状态。
步骤 1:添加OSHI依赖
首先,你需要在Spring Boot项目的pom.xml文件中添加OSHI的Maven依赖:
<dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>5.6.3</version> <!-- 使用最新版本 -->
</dependency>
步骤 2:使用OSHI获取系统信息
你可以在Spring Boot应用程序中创建一个服务类,使用OSHI来获取和返回系统信息。以下是一个简单的示例:
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OperatingSystem;import org.springframework.stereotype.Service;@Service
public class SystemInfoService {private final SystemInfo systemInfo;public SystemInfoService() {this.systemInfo = new SystemInfo(); // 创建SystemInfo实例}// 获取操作系统信息public String getOperatingSystemInfo() {OperatingSystem os = systemInfo.getOperatingSystem();return os.toString();}// 获取CPU信息public String getCpuInfo() {HardwareAbstractionLayer hardware = systemInfo.getHardware();CentralProcessor processor = hardware.getProcessor();return "CPU: " + processor.getProcessorIdentifier().getName() +", Cores: " + processor.getLogicalProcessorCount();}// 获取内存信息public String getMemoryInfo() {HardwareAbstractionLayer hardware = systemInfo.getHardware();long totalMemory = hardware.getMemory().getTotal();return "Total Memory: " + totalMemory / 1024 / 1024 + " MB";}
}
步骤 3:创建Controller来暴露这些信息
为了将这些信息展示给用户,你可以创建一个REST API接口来提供系统信息。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SystemInfoController {private final SystemInfoService systemInfoService;public SystemInfoController(SystemInfoService systemInfoService) {this.systemInfoService = systemInfoService;}@GetMapping("/api/system-info")public String getSystemInfo() {return "OS Info: " + systemInfoService.getOperatingSystemInfo() + "\n" +"CPU Info: " + systemInfoService.getCpuInfo() + "\n" +"Memory Info: " + systemInfoService.getMemoryInfo();}
}
步骤 4:访问API
启动你的Spring Boot应用程序后,访问以下URL,你就能看到系统的基本信息:
http://localhost:8080/api/system-info
OSHI提供的其他功能
OSHI除了提供系统、CPU和内存信息,还可以获取更多的硬件和操作系统的详细信息,如:
- 获取磁盘信息 (
systemInfo.getHardware().getDiskStores()) - 获取网络接口信息 (
systemInfo.getHardware().getNetworkIFs()) - 获取操作系统版本和体系结构等。
这些都可以通过类似的方式进行访问和展示。你可以根据需要扩展和定制你的服务。
总结
使用OSHI与Spring Boot结合,可以轻松获取和展示系统的硬件和操作系统信息,适用于监控、诊断等多种应用场景。
相关文章:
OSHI 介绍与使用
OSHI 介绍 OSHI(Operating System and Hardware Information)是一个开源的Java库,用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问,且不依赖于平台特定的…...
Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署
文章目录 前言一、部署规划二、Hadoop HA集群部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …...
【RocketMQ】Name Server 无状态特点及如何让 Broker Consumer Producer 感知新节点
文章目录 前言1. Name Server 无状态特点2. Name Server 地址服务3. Name Server 手动配置后记 前言 看了 《RocketMQ 消息中间件实战派(上册)》前面一点,书中代码太多容易陷入细节。 这里简单描述下 RocketMQ Name Server 无状态表现在什么…...
蓝牙定位的MATLAB程序,四个锚点、三维空间
这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...
机器学习--绪论
开启这一系列文章的初衷,是希望搭建一座通向机器学习世界的桥梁,为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展,机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…...
Unity 设计模式-命令模式(Command Pattern)详解
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成对象,从而使得可以使用不同的请求、队列或日志请求,以及支持可撤销的操作。命令模式通常包含四个主要角色:命令(Command…...
线程信号量 Linux环境 C语言实现
既可以解决多个同类共享资源的互斥问题,也可以解决简易的同步问题 头文件:#include <semaphore.h> 类型:sem_t 初始化:int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…...
karmada-descheduler
descheduler规则 karmada-descheduler 定期检测所有部署,通常是每2分钟一次,并确定目标调度集群中无法调度的副本数量。它通过调用 karmada-scheduler-estimator 来完成这个过程。如果发现无法调度的副本,它将通过减少 spec.clusters 的配…...
【热门主题】000075 探索嵌入式硬件设计的奥秘
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
Android okhttp请求
下面是一个用 OkHttp 封装的 GET 请求方法,适用于 Android 项目。该方法包括基本的网络请求、错误处理,并支持通过回调返回结果。 封装 GET 请求的工具类 添加依赖 在你的 build.gradle 文件中,确保添加了 OkHttp 的依赖: imple…...
嵌入式蓝桥杯学习4 lcd移植
cubemx配置 复制前面配置过的文件 打开cubemx,将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包,点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h,粘贴到我们自己的工程文件夹的bsp中(…...
电子应用设计方案-38:智能语音系统方案设计
智能语音系统方案设计 一、引言 智能语音系统作为一种便捷、自然的人机交互方式,正逐渐在各个领域得到广泛应用。本方案旨在设计一个高效、准确、功能丰富的智能语音系统。 二、系统概述 1. 系统目标 - 实现高准确率的语音识别和自然流畅的语音合成。 - 支持多种语…...
渗透测试:网络安全的深度探索
一、引言 在当今数字化时代,网络安全问题日益凸显。企业和组织面临着来自各种恶意攻击者的威胁,他们试图窃取敏感信息、破坏系统或进行其他恶意活动。渗透测试作为一种主动的安全评估方法,能够帮助企业发现潜在的安全漏洞,提高网…...
基于SpringBoot的“小区物业管理系统”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“小区物业管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 费用信息管理…...
调试android 指纹遇到的坑
Android8以后版本 一、指纹服务不能自动 指纹服务fingerprintd(biometrics fingerprintservice),可以手动起来,但是在init.rc中无法启动。 解决办法: 1.抓取开机时kernel log ,确认我们的启动指纹服务的init.rc 文件有被init.c…...
剑指offer(专项突破)---字符串
总目录:剑指offer(专项突破)---目录-CSDN博客 1.字符串的基本知识 C语言中: 函数名功能描述strcpy(s1, s2)将字符串s2复制到字符串s1中,包括结束符\0,要求s1有足够空间容纳s2的内容。strncpy(s1, s2, n)…...
【springboot】 多数据源实现
文章目录 1. 引言:多数据源的必要性和应用场景**为什么需要多数据源?****应用场景** 2. Spring Boot中的数据源配置2.1 默认数据源配置简介2.2 如何在Spring Boot中配置多个数据源 3. 整合MyBatis与多数据源**配置MyBatis使用多数据源****Mapper接口的数…...
多模态COGMEN详解
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
django 实战(python 3.x/django 3/sqlite)
要在 Python 3.x 环境中使用 Django 3.2 和 SQLite 创建一个新的 Django 项目,你可以按照以下步骤进行操作。这些步骤假设你已经安装了 Python 3.x 和 pip。 1. 设置虚拟环境 首先,建议为你的 Django 项目创建一个虚拟环境,以便隔离项目的依…...
图数据库 | 12、图数据库架构设计——高性能计算架构
在传统类型的数据库架构设计中,通常不会单独介绍计算架构,一切都围绕存储引擎展开,毕竟存储架构是基础,尤其是在传统的基于磁盘存储的数据库架构设计中。 类似地,在图数据库架构设计中,项目就围绕存储的方…...
2026年,AI到底杀死了哪些行业?又催生了哪些新机会?
AI对传统行业的冲击2026年,AI的快速发展可能导致部分传统行业被大幅削弱甚至消失:客服行业:智能客服系统(如ChatGPT、语音AI)已能高效处理大部分标准化咨询,人工客服需求锐减。数据录入与基础会计ÿ…...
Electron实战:将你的网页应用打包成桌面客户端
在当今数字化时代,网页应用已经渗透到我们工作和生活的方方面面。有时我们仍然需要一个桌面客户端来提供更稳定的运行环境、离线功能或更好的系统集成。Electron作为一个强大的跨平台框架,能够帮助开发者轻松将网页应用打包成桌面客户端。无论是开发效率…...
ChatGLM3-6B-128K vs ChatGLM3-6B:Ollama环境下的8K/128K场景选型指南
ChatGLM3-6B-128K vs ChatGLM3-6B:Ollama环境下的8K/128K场景选型指南 1. 两种模型的核心差异 ChatGLM3-6B和ChatGLM3-6B-128K都是基于ChatGLM3系列的开源对话模型,但它们在处理长文本能力上有着本质区别。 ChatGLM3-6B是标准版本,支持最多…...
3 个高级思路,让你的 AI 绘画 / 视频从此充满想象力
前言 如今 AI 视频与绘画工具的画质越来越卷,清晰度、光影、细节几乎都已触达天花板。但真正能让人记住、能脱颖而出的作品,靠的从来不是画质,而是想象力。 当所有人都在追求 “大片感” 时,你只需要换一种思路 ——用创意打破平…...
如何通过智慧树自动化学习助手解决网课学习效率问题
如何通过智慧树自动化学习助手解决网课学习效率问题 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 副标题:面向时间紧张学习者的智能网课辅助工具 一、价…...
Android开发者的USB摄像头避坑指南:从设备枚举到SurfaceView预览的完整流程
Android开发者实战:USB摄像头集成全流程与疑难解析 去年接手一个医疗设备项目时,我需要在Android平板上接入工业级USB摄像头。本以为三天能搞定,结果光是解决画面拉伸问题就耗了一周。这份踩坑经验总结,将带你系统掌握从设备枚举到…...
ESC固件底层开发:寄存器级驱动与无传感器换相实现
1. ESC固件底层技术解析:电子调速器固件架构与驱动实现电子调速器(Electronic Speed Controller, ESC)是无人机、电动航模、机器人驱动系统中的核心执行单元,其本质是一个高动态响应的三相逆变器控制器。ESC固件并非简单的PWM输出…...
基于深度学习的文本情感分析改进模型实验方案
基于深度学习的文本情感分析改进模型实验方案 一、实验背景与目的 1.1 背景 情感分析是自然语言处理的核心任务之一,旨在自动识别文本所表达的情感倾向(如正面、负面)。传统机器学习方法依赖人工特征工程,而深度学习方法能够自动学习文本的层次化特征表示。然而,现有模…...
基于胸部正位X光片的两阶段对比学习椎体压缩性骨折筛查框架文献速递-多模态医学影像最新进展
2026.4.2本研究提出一种基于胸部正位X光片的双阶段对比学习框架TADC-Net,通过模仿放射科医生的诊断流程,解决了器官遮挡和类间相似性等挑战,实现了椎体压缩性骨折的早期精准筛查,显著提升了诊断性能和临床辅助准确性。Title题目01…...
LSM303D六轴IMU驱动开发:I²C底层集成与100Hz高精度运动检测
1. LSM303D传感器驱动库深度解析:面向嵌入式系统的IC底层集成与高精度运动检测实现LSM303D是意法半导体(STMicroelectronics)推出的超低功耗、高精度六轴惯性测量单元(IMU),集成3轴加速度计与3轴磁力计于单…...
