Java 使用oshi获取当前服务器状态cpu、内存、存储等核心信息
创始人
2025-01-20 06:03:27
0

文章目录

  • 简介
  • 相关资料
  • maven依赖
  • oshi-官方示例
  • 获取CUP信息代码
  • 获取内存信息
  • 获取磁盘信息

简介

OSHI 是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。

使用 OSHI 可以对应用程序进行监控,可以对应用程序所在的服务器资源进行监控,还可以监控到其他许多指标,如下:

1、计算机系统和固件,底板
2、操作系统和版本 / 内部版本
3、物理(核心)和逻辑(超线程)CPU,处理器组,NUMA 节点
4、系统和每个处理器的负载百分比和滴答计数器
5、CPU 正常运行时间,进程和线程
6、进程正常运行时间,CPU,内存使用率,用户 / 组,命令行
7、已使用 / 可用的物理和虚拟内存
8、挂载的文件系统(类型,可用空间和总空间)
9、磁盘驱动器(型号,序列号,大小)和分区
10、网络接口(IP,带宽输入 / 输出)
11、电池状态(电量百分比,剩余时间,电量使用情况统计信息)
12、连接的显示器(带有 EDID 信息)
13、USB 设备
14、传感器(温度,风扇速度,电压)

支持的平台:

Windows
Linux
macOS
UNIX (AIX, FreeBSD, OpenBSD, Solaris)

相关资料

github 地址:https://github.com/oshi/oshi
API 文档:http://oshi.github.io/oshi/apidocs/

maven依赖

                    com.github.oshi             oshi-core             6.3.2                               net.java.dev.jna             jna             5.12.1                               net.java.dev.jna             jna-platform             5.12.1          

在这里插入图片描述

oshi-官方示例

此外,该oshi-demo模块包括一个OshiGui类,它实现了一个基本的 Swing GUI,为在 UI、监控或警报应用程序中使用 OSHI 的潜在可视化提供建议,如下所示。有关基于此方法的更高级 GUI,请参阅MooInfo 项目。

获取CUP信息代码

获取时与windows窗口等查看CUP利用率的信息有差异,本身CUP利用率存在很大的波动。

public static CpuEntity getCpu() throws InterruptedException {         SystemInfo systemInfo = new SystemInfo();         GlobalConfig.set(GlobalConfig.OSHI_OS_WINDOWS_CPU_UTILITY, Boolean.TRUE);         CentralProcessor processor = systemInfo.getHardware().getProcessor();         long[] prevTicks = processor.getSystemCpuLoadTicks();         // 睡眠1s         TimeUnit.SECONDS.sleep(1);         long[] ticks = processor.getSystemCpuLoadTicks();         long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];         long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];         long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];         long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];         long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];         long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];         long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];         long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];         long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;         CpuEntity cpuEntity = new CpuEntity();         cpuEntity.setSys(new DecimalFormat("#.##").format(cSys * 1.0 / totalCpu));         cpuEntity.setUser(new DecimalFormat("#.##").format(user * 1.0 / totalCpu));         cpuEntity.setWait(new DecimalFormat("#.##").format(iowait * 1.0 / totalCpu));         cpuEntity.setWait(new DecimalFormat("#.##").format(idle * 1.0 / totalCpu));         //  user + system + nice + iowait + irq + softirq + steal         long cpuUtilization = user + nice + cSys + iowait + irq + softirq + steal;         cpuEntity.setCombined(new DecimalFormat("#.##").format((cpuUtilization * 1.0 / totalCpu)*100));         return cpuEntity;     } 

获取内存信息

    public static MemoryEntity getMemory() {         OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();         MemoryEntity memoryEntity = new MemoryEntity();         memoryEntity.setMemTotal(osmxb.getTotalPhysicalMemorySize() / 1024 / 1024 / 1024);         memoryEntity.setMemUsed((osmxb.getTotalPhysicalMemorySize() - osmxb.getFreePhysicalMemorySize()) / 1024 / 1024 / 1024);         return memoryEntity;     } 

获取磁盘信息

  			File[] roots = File.listRoots();             Long useSum = 0l;             Long totalSum = 0l;             for (File file : roots) {                 long free = file.getFreeSpace();                 long total = file.getTotalSpace();                 long use = total - free;                 useSum += change(use);                 totalSum += change(total);             } 

相关内容

热门资讯

4分钟辅助器!微信小程序填大坑... 4分钟辅助器!微信小程序填大坑辅助器(辅助挂)德州教程(竟然存在有挂)微信小程序填大坑辅助器辅助器中...
黑科技辅助“新蛮王辅助器”外挂... 黑科技辅助“新蛮王辅助器”外挂透视辅助工具(原来存在有挂);1、新蛮王辅助器透视辅助简单,新蛮王辅助...
7分钟辅助器!猎鱼达人破解版无... 7分钟辅助器!猎鱼达人破解版无限弹头(辅助挂)果然真的有挂(详细辅助辅助教程)1、猎鱼达人破解版无限...
第9分钟脚本!盛世2辅助工具(... 第9分钟脚本!盛世2辅助工具(辅助挂)安装教程(从前存在有挂)(1)第9分钟脚本!盛世2辅助工具(辅...
六分钟辅助!闲聚app辅助软件... 六分钟辅助!闲聚app辅助软件(辅助挂)都是是真的有挂(详细辅助详细教程)1、任何闲聚app辅助软件...
黑科技辅助挂“蜀山四川免费辅助... 黑科技辅助挂“蜀山四川免费辅助器”外挂透视辅助器(本来真的是有挂)该软件可以轻松地帮助玩家将蜀山四川...
第六分钟辅助器!开心庄园辅助器... 第六分钟辅助器!开心庄园辅助器免费(辅助挂)揭秘攻略(原本存在有挂)开心庄园辅助器免费辅助器中分为三...
2分钟辅助挂!杭州都莱辅助软件... 2分钟辅助挂!杭州都莱辅助软件有没有用(辅助挂)原来是有挂(详细辅助揭秘教程);1、金币登录送、破产...
黑科技辅助挂“网易水润血战到底... 黑科技辅助挂“网易水润血战到底辅助”外挂透视辅助器(其实真的有挂)1、每一步都需要思考,不同水平的挑...
2分钟辅助器!欢乐达人葫芦鱼辅... 2分钟辅助器!欢乐达人葫芦鱼辅助(辅助挂)2025新版教程(一直真的是有挂)1、在欢乐达人葫芦鱼辅助...