当前位置: 首页 > news >正文

OSHI 介绍与使用

OSHI 介绍

OSHI(Operating System and Hardware Information)是一个开源的Java库,用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问,且不依赖于平台特定的API,能够在多种操作系统上(如Windows、Linux、macOS)无缝运行。OSHI的主要目标是简化系统信息的获取,减少开发者的工作量,尤其是在需要获取硬件和操作系统信息的情况下。

OSHI的主要功能

  1. 操作系统信息(Operating System)

    • 获取操作系统的名称、版本、架构、内核版本、系统类型等。
    • 访问操作系统的系统资源使用情况,如负载、运行时信息等。
  2. 硬件信息(Hardware)

    • 提供硬件抽象层(Hardware Abstraction Layer,HAL),可以访问和查询系统的硬件设备信息,如CPU、内存、硬盘、网络接口等。
    • CPU信息:如CPU型号、核心数、线程数等。
    • 内存信息:如总内存、已使用内存、剩余内存等。
    • 磁盘信息:磁盘型号、存储容量、已用空间等。
    • 网络接口信息:获取网络接口的名字、MAC地址、IP地址等。
  3. 传感器信息(Sensors)

    • 获取温度、风扇速度、CPU温度等传感器数据(在支持的平台上)。
  4. 传输和IO统计(IO and Transports)

    • 提供I/O操作的统计信息,如读写操作次数、字节数等。
    • 获取网络传输数据量(输入和输出)以及数据包统计。
  5. 系统性能指标(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的常见场景

  1. 系统监控

    • 获取系统负载、内存使用情况、CPU使用率等性能数据,帮助你监控服务器或工作站的状态。
  2. 硬件信息查询

    • 获取关于计算机硬件的详细信息,如CPU型号、内存大小、磁盘空间等,这对于自动化部署、资产管理等非常有用。
  3. 性能调优

    • 收集系统性能数据,帮助进行性能分析和调优。
  4. 服务器监控工具

    • 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&#xff08;Operating System and Hardware Information&#xff09;是一个开源的Java库&#xff0c;用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问&#xff0c;且不依赖于平台特定的…...

Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署

文章目录 前言一、部署规划二、Hadoop HA集群部署&#xff08;手动部署&#xff09;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 消息中间件实战派&#xff08;上册&#xff09;》前面一点&#xff0c;书中代码太多容易陷入细节。 这里简单描述下 RocketMQ Name Server 无状态表现在什么…...

蓝牙定位的MATLAB程序,四个锚点、三维空间

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念&#xff0c;并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...

机器学习--绪论

开启这一系列文章的初衷&#xff0c;是希望搭建一座通向机器学习世界的桥梁&#xff0c;为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展&#xff0c;机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…...

Unity 设计模式-命令模式(Command Pattern)详解

命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装成对象&#xff0c;从而使得可以使用不同的请求、队列或日志请求&#xff0c;以及支持可撤销的操作。命令模式通常包含四个主要角色&#xff1a;命令&#xff08;Command&#xf…...

线程信号量 Linux环境 C语言实现

既可以解决多个同类共享资源的互斥问题&#xff0c;也可以解决简易的同步问题 头文件&#xff1a;#include <semaphore.h> 类型&#xff1a;sem_t 初始化&#xff1a;int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…...

karmada-descheduler

descheduler规则 karmada-descheduler 定期检测所有部署&#xff0c;通常是每2分钟一次&#xff0c;并确定目标调度集群中无法调度的副本数量。它通过调用 karmada-scheduler-estimator 来完成这个过程。如果发现无法调度的副本&#xff0c;它将通过减少 spec.clusters 的配…...

【热门主题】000075 探索嵌入式硬件设计的奥秘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

Android okhttp请求

下面是一个用 OkHttp 封装的 GET 请求方法&#xff0c;适用于 Android 项目。该方法包括基本的网络请求、错误处理&#xff0c;并支持通过回调返回结果。 封装 GET 请求的工具类 添加依赖 在你的 build.gradle 文件中&#xff0c;确保添加了 OkHttp 的依赖&#xff1a; imple…...

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx&#xff0c;将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包&#xff0c;点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h&#xff0c;粘贴到我们自己的工程文件夹的bsp中&#xff08…...

电子应用设计方案-38:智能语音系统方案设计

智能语音系统方案设计 一、引言 智能语音系统作为一种便捷、自然的人机交互方式&#xff0c;正逐渐在各个领域得到广泛应用。本方案旨在设计一个高效、准确、功能丰富的智能语音系统。 二、系统概述 1. 系统目标 - 实现高准确率的语音识别和自然流畅的语音合成。 - 支持多种语…...

渗透测试:网络安全的深度探索

一、引言 在当今数字化时代&#xff0c;网络安全问题日益凸显。企业和组织面临着来自各种恶意攻击者的威胁&#xff0c;他们试图窃取敏感信息、破坏系统或进行其他恶意活动。渗透测试作为一种主动的安全评估方法&#xff0c;能够帮助企业发现潜在的安全漏洞&#xff0c;提高网…...

基于SpringBoot的“小区物业管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“小区物业管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 费用信息管理…...

调试android 指纹遇到的坑

Android8以后版本 一、指纹服务不能自动 指纹服务fingerprintd(biometrics fingerprintservice)&#xff0c;可以手动起来&#xff0c;但是在init.rc中无法启动。 解决办法&#xff1a; 1.抓取开机时kernel log &#xff0c;确认我们的启动指纹服务的init.rc 文件有被init.c…...

剑指offer(专项突破)---字符串

总目录&#xff1a;剑指offer&#xff08;专项突破&#xff09;---目录-CSDN博客 1.字符串的基本知识 C语言中&#xff1a; 函数名功能描述strcpy(s1, s2)将字符串s2复制到字符串s1中&#xff0c;包括结束符\0&#xff0c;要求s1有足够空间容纳s2的内容。strncpy(s1, s2, n)…...

【springboot】 多数据源实现

文章目录 1. 引言&#xff1a;多数据源的必要性和应用场景**为什么需要多数据源&#xff1f;****应用场景** 2. Spring Boot中的数据源配置2.1 默认数据源配置简介2.2 如何在Spring Boot中配置多个数据源 3. 整合MyBatis与多数据源**配置MyBatis使用多数据源****Mapper接口的数…...

多模态COGMEN详解

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

django 实战(python 3.x/django 3/sqlite)

要在 Python 3.x 环境中使用 Django 3.2 和 SQLite 创建一个新的 Django 项目&#xff0c;你可以按照以下步骤进行操作。这些步骤假设你已经安装了 Python 3.x 和 pip。 1. 设置虚拟环境 首先&#xff0c;建议为你的 Django 项目创建一个虚拟环境&#xff0c;以便隔离项目的依…...

图数据库 | 12、图数据库架构设计——高性能计算架构

在传统类型的数据库架构设计中&#xff0c;通常不会单独介绍计算架构&#xff0c;一切都围绕存储引擎展开&#xff0c;毕竟存储架构是基础&#xff0c;尤其是在传统的基于磁盘存储的数据库架构设计中。 类似地&#xff0c;在图数据库架构设计中&#xff0c;项目就围绕存储的方…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...