首页 > 编程语言 >Java—oshi获取主机运行信息

Java—oshi获取主机运行信息

时间:2022-12-07 11:15:34浏览次数:46  
标签:sigar Java 主机 CPU libsigar oshi operatingSystem

Java—oshi获取主机运行信息

  在该监控系统中,想要做到主机的CPU、内存、磁盘、网络、线程、JVM内存、JVM GC 等维度的监控,JVM方面的监控还好说,直接用JMX做就行了,关键是主机信息不好做监控,JDK没有直接的方案获取系统主机信息。以下几种方式获取主机维度的信息。

一、命令行

用最常用的命令行获取主机维度的信息,具体做法是针对不同的系统,写不同的命令。比如说Linux系统,使用TOP命令就能获取到CPU、内存等方面的信息。

top -b -n 1

执行该TOP命令就能获取到CPU、内存等维度的信息

Tasks: 515 total, 1 running, 511 sleeping, 3 stopped, 0 zombie

Cpu(s): 14.5%us, 5.3%sy, 0.0%ni, 77.0%id, 0.8%wa, 0.0%hi, 2.4%si, 0.0%st

Mem: 65779104k total, 62037048k used, 3742056k free, 425804k buffers

Swap: 0k total, 0k used, 0k free, 21948492k cached

这种方式虽然好,但是需要针对不同系统做兼容。

二、sigar

sigar的api用起来也挺方便的,简单且使用人数多。

/ CPU数量(单位:个)

int cpuLength = sigar.getCpuInfoList().length;

print(cpuLength);

// CPU的总量(单位:HZ)及CPU的相关信息

CpuInfo infos[] = sigar.getCpuInfoList();

for (int i = 0; i < infos.length; i++) {// 不管是单块CPU还是多CPU都适用

CpuInfo info = infos[i];

print("mhz=" + info.getMhz());// CPU的总量MHz

print("vendor=" + info.getVendor());// 获得CPU的卖主,如:Intel

print("model=" + info.getModel());// 获得CPU的类别,如:Celeron

print("cache size=" + info.getCacheSize());// 缓冲存储器数量

}

但是,sigar需要根据不同的系统下载不同的库文件,倾入性较高。

sigar 库文件

windows平台:sigar-x86-winnt.dll

linux平台:libsigar-x86-linux.so或

solaris平台: libsigar-x86-solaris.so或libsigar-sparc-solaris.so或libsigar-sparc64-solaris.so

64位平台:分为至强的libsigar-ia64-linux.so和AMD的libsigar-amd64-linux.so,sigar-amd64-winnt.dll

三、oshi

首先,引入jar包

<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.3.1</version>
</dependency>

// 获取主机信息

SystemInfo systemInfo = new SystemInfo();

// 获取操作系统信息

OperatingSystem operatingSystem = systemInfo.getOperatingSystem();

operatingSystem.getNetworkParams().getHostName();

operatingSystem.getFamily();

operatingSystem.getVersion().getVersion();

operatingSystem.getVersion().getBuildNumber();

operatingSystem.getBitness();

operatingSystem.getProcessCount();

operatingSystem.getThreadCount();

就是这么简单,不需要不同系统引入不同的库文件,也不用自己做系统兼容。

oshi自己做了兼容,目前大概兼容些这些系统: Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX。

四、对比

命令行:灵活度高,兼容性强,但是如果要兼容多个平台的话,自己做还是有些麻烦。

sigar:社区活跃度高,参考文档全面,麻烦在于需要不同平台引入不同的库文件。

oshi:拿来主义,使用方便,缺点在于文档少。看看github上的文档。

 

标签:sigar,Java,主机,CPU,libsigar,oshi,operatingSystem
From: https://www.cnblogs.com/lizm166/p/16962500.html

相关文章

  • Java—bouncycastle支持国密SM2的公钥加密算法
    Java—bouncycastle支持国密SM2的公钥加密算法java代码是依赖BouncyCastle类库,经修改此类库中的 SM2Engin 类的原码而来,用于支持SM2公钥加密算法,符合:《GM/T000......
  • (Java跳蚤网/IT枫斗者)详细步骤Jdk16下载安装与环境变量配置
    一:首先去官网下载Jdk如下地址复制到浏览器。1、下载地址:​​https://www.oracle.com/java/technologies/javase-jdk16-downloads.html​​2、点击下载,下载完了之后双击它。......
  • (Java跳蚤网/IT枫斗者)详细步骤Jdk16下载安装与环境变量配置
    一:首先去官网下载Jdk如下地址复制到浏览器。1、下载地址:​​https://www.oracle.com/java/technologies/javase-jdk16-downloads.html​​2、点击下载,下载完了之后双击它。......
  • Java 枚举(enum) 详解7种常见的用法
    Java枚举(enum)详解7种常见的用法常量在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了......
  • Java8的Stream流如此强大,你知道它的原理吗
    ......
  • javaScript_01_按照key排序
     javaScript_01_按照key排序前言Object.keys()与Objetc.values()实现按key排序前言最近做一个小程序项目需要用到腾讯地图的api,在计算sig的时候需要将参数按照......
  • java基础之数据类型转换
    一简介1.Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。由低到高:byte,short,char——int——long——float——double二转换类型1.强制转换由高到低......
  • Java基础7-(练习题,Debug)
    Java基础7-(练习题,Debug)习题:数组遍历需求:设计一个方法用于数组遍历,要求遍历结果在一行上,例如[11,22,33,44,55]数组求值需求:设计方法,输出数组的最大,最小,总和......
  • javascript - 判定输入浮点数是否合法
    方法借鉴其他作者,我进行了错误汇总并完善,记录以备后用;首先建立一个功能函数,用于检查输入浮点数是否合法:functionCheckValueError(theFloat){}//返回True表示错误,返回F......
  • JavaScript入门⑦-DOM操作大全
    JavaScript入门系列目录JavaScript入门①-基础知识筑基JavaScript入门②-函数(1)基础{浅出}JavaScript入门③-函数(2)原理{深入}执行上下文JavaScript入门④-万物皆......