java实现查看信息_Java 实现查看cpu信息、服务器信息、操作系统信息、jvm 信息...

本文介绍了如何使用Java的OSHI库获取CPU、服务器内存、操作系统和JVM的详细信息,包括CPU使用率、内存使用情况、操作系统名称和架构以及JVM内存状态。
摘要由CSDN通过智能技术生成

Java 实现查看cpu信息、服务器信息、操作系统信息、jvm 信息

Java 实现查看cpu信息、服务器信息、操作系统信息、jvm 信息

文章目录

引入依赖

获取 cpu 信息

获取服务器信息

formatByte 换算单位工具类

获取操作系统信息

获取 JVM 信息

测试结果

Java想要实现跨平台查看服务器信息,可以使用 OSHI 开源 jar 包实现

com.github.oshi

oshi-core

3.12.2

/**

* 获取 cpu 信息

*/

private static void getCpuInfo() {

System.err.println("===============cpu信息begin===============");

SystemInfo systemInfo = new SystemInfo();

CentralProcessor processor = systemInfo.getHardware().getProcessor();

long[] prevTicks = processor.getSystemCpuLoadTicks();

try {

// 睡眠 1s

TimeUnit.SECONDS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

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;

System.out.println("cpu核数:" + processor.getLogicalProcessorCount());

System.out.println("cpu系统使用率:" + new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));

System.out.println("cpu用户使用率:" + new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));

System.out.println("cpu当前等待率:" + new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));

System.out.println("cpu当前使用率:" + new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));

System.err.println("===============cpu信息end===============\n");

}

/**

* 获取主机内存信息

*/

private static void getMemoryInfo() {

System.err.println("===============主机内存信息begin===============");

SystemInfo systemInfo = new SystemInfo();

GlobalMemory memory = systemInfo.getHardware().getMemory();

long totalMemory = memory.getTotal(); // 总内存

long acaliableMemory = memory.getAvailable(); // 剩余内存

System.out.println("总内存:" + formatByte(totalMemory));

System.out.println("已经使用的内存:" + formatByte(totalMemory - acaliableMemory));

System.out.println("剩余内存:" + formatByte(acaliableMemory));

System.out.println("使用率:" + new DecimalFormat("#.##%").format((totalMemory - acaliableMemory) * 1.0 / totalMemory));

System.err.println("===============主机内存信息end===============\n");

}

/**

* 换算单位

*

* @param byteNumber 换算的数字

*/

private static String formatByte(long byteNumber) {

double format = 1024.0;

double kbNumber = byteNumber / format;

if (kbNumber < format)

return new DecimalFormat("#.##KB").format(kbNumber);

double mbNumber = kbNumber / format;

if (mbNumber < format)

return new DecimalFormat("#.##MB").format(mbNumber);

double gbNumber = mbNumber / format;

if (gbNumber < format)

return new DecimalFormat("#.##GB").format(gbNumber);

double tbNumber = gbNumber / format;

return new DecimalFormat("#.##TB").format(tbNumber);

}

/**

* 获取操作系统信息

*/

private static void getSystemInfo() {

System.err.println("===============操作系统信息begin==============");

String osName = System.getProperty("os.name"); // 系统名称

String osArch = System.getProperty("os.arch"); // 架构名称

System.out.println("操作系统名称:" + osName);

System.out.println("系统架构:" + osArch);

System.err.println("===============操作系统信息end==============\n");

}

/**

* 获取 Jvm 信息

*/

private static void getJvmInfo() {

System.err.println("===============Jvm信息begin===============");

Runtime runtime = Runtime.getRuntime();

long jvmTotalMemoryByte = runtime.totalMemory(); // jvm总内存

long jvmMaxMemoryByte = runtime.maxMemory(); // jvm 最大内存

long freeMemoryByte = runtime.freeMemory(); // jvm 空闲空间

String jdkVersion = System.getProperty("java.version"); // jdk 版本

String jdkHome = System.getProperty("java.home"); // jdk 安装路径

System.out.println("jvm总内存:" + formatByte(jvmTotalMemoryByte));

System.out.println("jvm已使用内存:" + formatByte(jvmTotalMemoryByte - freeMemoryByte));

System.out.println("jvm最大内存:" + formatByte(jvmMaxMemoryByte));

System.out.println("jvm剩余内存:" + formatByte(freeMemoryByte));

System.out.println("jvm内存使用率:" + new DecimalFormat("#.##%").format((jvmTotalMemoryByte - freeMemoryByte) * 1.0 / jvmTotalMemoryByte));

System.out.println("jdk版本号:" + jdkVersion);

System.out.println("jdk安装路径:" + jdkHome);

System.err.println("===============Jvm信息end===============");

}

23b1f6c0de5dc627620c29b87d7469f9.png

5927814763d639e523f4d3a7ccea7dfd.png

25da03877730e3fa28ec2dcbb56aec97.png

67c1b3d6256b76ba62073205ba0dbb1f.png

Java 实现查看cpu信息、服务器信息、操作系统信息、jvm 信息相关教程

AIM2020-ESR冠军方案解读:引入注意力模块ESA,实现高效轻量的超

AIM2020-ESR冠军方案解读:引入注意力模块ESA,实现高效轻量的超分网络(附代码实现) 该文是南京大学提出的一种轻量高效图像超分网络,它获得了AIM20-ESR竞赛的冠军。它在IMDN的基础上提出了两点改进,并引入RFANet的一种ESA注意力模块。如果从结果出发来看R

webSocket实现客户端登录唯一(同时间只有一台pc登录该账号)

webSocket实现客户端登录唯一(同时间只有一台pc登录该账号) 它可以实现B/S之间的长连接 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API

蓝桥杯__基础练习3__字母图形__java,两种解法

蓝桥杯__基础练习3__字母图形__java,两种解法 题目: 法一: ??分析: ????我们假设A = 0,B = 1,C = 2,……这时,5行7列的图形就变成了: ????0123456 ????1012345 ????2101234 ????3210123 ????4321012 ????找规律,我们发现,某位置的数字 = 该数字所在

线性表-顺序表C语言实现

线性表-顺序表C语言实现 线性表,全名为 线性存储结构 。使用线性表存储结构的方式可以理解,即“ 把所有的数据都用一根线串起来在存储到物理空间中 ”。 顺序存储结构和链式存储结构 将数据依次存储在连续的整块物理空间中,这种存储结构称为 顺序存储结构

taro实现小程序端瀑布流

taro实现小程序端瀑布流 微信小程序暂时未发现如何获取dom,但能获取节点的信息taro端可通过ref获取到节点,但无法通过节点获取节点的相关信息 效果图: 代码示例: import Taro from '@tarojs/taro'import {View,Text,Image} from '@tarojs/components'import Re

055.Javascript初探

055.Javascript初探 文章目录 一、JavaScript简介 二、JavaScript引入方式 三、JavaScript语法规范 四、变量 五、数据类型与内置方法 (一)数值(Number) (二)**字符串(String)** (三)布尔值(Boolean) (四)null和undefined (五)常用内置对象 1.

iframe实现页中页效果只需两步走

iframe实现页中页效果只需两步走 实现步骤 1、 target 链接目标打开的位置。 2、设置 iframe 。 点击跳转后 仅参考 style * { padding: 0; margin: 0; } /* 大盒子分左右 */ .menu { display: flex; width: 100%; } /* 左边 */ .menu .list_left { width: 200

idea maven打包 报错java找不到符号

idea maven打包 报错:java:找不到符号 idea项目不报错,可以正常跑起来,但是打包报错:java:找不到符号 尝试了很多方法,都没有解决。久其原因就是,多模块项目相互依赖关系比较复杂造成的。或者其他原因导致编译失败。、 首先声明,项目在idea中用tomcat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值