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、图数据库架构设计——高性能计算架构
在传统类型的数据库架构设计中,通常不会单独介绍计算架构,一切都围绕存储引擎展开,毕竟存储架构是基础,尤其是在传统的基于磁盘存储的数据库架构设计中。 类似地,在图数据库架构设计中,项目就围绕存储的方…...
LeetCode 409:最长回文串 | 哈希表统计字符频率
LeetCode 409:最长回文串 | 哈希表统计字符频率 引言 最长回文串(Longest Palindrome)是 LeetCode 第 409 题,难度为 Easy。题目要求在给定字符串中构造最长的回文串,返回其长度。这道题虽然简单,但蕴含了回…...
3步解决微信红包难题:智能助手帮你告别手慢烦恼
3步解决微信红包难题:智能助手帮你告别手慢烦恼 【免费下载链接】WeChatLuckyMoney :money_with_wings: WeChats lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups. 项目地址: https:/…...
Parsec虚拟显示驱动实战教程:5步创建完美游戏串流显示环境
Parsec虚拟显示驱动实战教程:5步创建完美游戏串流显示环境 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd Parsec虚拟显示驱动(Parsec VDD)是一…...
OBS多平台直播插件:一次推流,全网同步的终极解决方案
OBS多平台直播插件:一次推流,全网同步的终极解决方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经想过,一场精彩的直播内容可以同时出现…...
QMCDecode终极指南:3步快速解锁QQ音乐加密格式,实现音频自由播放
QMCDecode终极指南:3步快速解锁QQ音乐加密格式,实现音频自由播放 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载…...
如何快速掌握猫抓工具:终极视频嗅探与下载指南
如何快速掌握猫抓工具:终极视频嗅探与下载指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页上的精彩视频无法保存而烦恼吗…...
C 语言通讯录(终版)|新手踩坑全总结 + 最终可运行代码博客简介
系列回顾 本系列三篇完整闭环: 第一篇(基础版):从零实现增删查改 文件存储,踩遍新手所有坑(格式符乱码、文件闪退、输入死循环);第二篇(优化版)࿱…...
如何快速突破百度网盘限速:高效下载工具终极指南
如何快速突破百度网盘限速:高效下载工具终极指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 百度网盘作为国内最流行的云存储平台,其下载速度限制一…...
Logistic Regression实战指南:Python构建可解释二分类模型
1. 这不是数学课,是解决真实问题的工具链——从“预测用户是否会点击广告”说起你手头有一份电商后台导出的用户行为日志:20万条记录,每条包含年龄、性别、浏览时长、页面跳转次数、是否收藏过商品、最近一次下单距今天数……最后一列是标签&…...
C++lambda表达式深入解析
Clambda表达式深入解析lambda表达式是C11引入的匿名函数特性,它提供了一种简洁的方式来定义内联函数对象,特别适合用于STL算法和回调函数。lambda表达式的基本语法包括捕获列表、参数列表、返回类型和函数体。#include #include #include #includevoid b…...
