java 系统工具类 查询内存 CPU 系统基本信息 SysInfoUtils

maven依赖

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

工具类代码

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.ComputerSystem;
import oshi.hardware.GlobalMemory;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OSProcess;
import oshi.software.os.OperatingSystem;
import oshi.util.Util;import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;/*** @author zhong*/
public class SysInfoUtils {/*** 信息类*/private static final SystemInfo systemInfo = new SystemInfo();/*** 硬件信息类*/private static final HardwareAbstractionLayer hardware = systemInfo.getHardware();/*** 操作系统信息类*/private static final OperatingSystem operatingSystem = systemInfo.getOperatingSystem();/*** 获取系统信息** @return 品牌 制造商 系统名称 版本 提供商*/public static Map<String, Object> getSysInfo() {Map<String, Object> info = new HashMap<>();ComputerSystem computerSystem = hardware.getComputerSystem();// 获取电脑品牌info.put("pcModel:", computerSystem.getModel());// 电脑制造商info.put("pcManufacturer", computerSystem.getManufacturer());// 系统名称System.out.println("osName" + operatingSystem.getFamily());// 系统版本System.out.println("osVersion" + operatingSystem.getVersionInfo());// 系统供应商System.out.println("osSupplier" + operatingSystem.getManufacturer());return info;}/*** 获取Cpu的运行情况** @return*/public static Map<String, Object> getCpuIngInfo() {Map<String, Object> cpuInfo = new HashMap<>();CentralProcessor processor = hardware.getProcessor();// CPU信息long[] prevTicks = processor.getSystemCpuLoadTicks();//休眠1秒Util.sleep(1000);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;cpuInfo.put("total", totalCpu);//cpu系统使用率cpuInfo.put("cSys", new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));//cpu用户使用率cpuInfo.put("user", new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));//cpu当前等待率cpuInfo.put("iowait", new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));//cpu当前使用率cpuInfo.put("used", idle);//空闲cpuInfo.put("free", totalCpu - idle);//百分百cpuInfo.put("idle", new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));return cpuInfo;}/*** 获取系统信息内存** @return*/public static Map<String, Object> getRamInfo() {Map<String, Object> ram = new HashMap();GlobalMemory memory = systemInfo.getHardware().getMemory();//总内存long totalByte = memory.getTotal();//剩余long availableByte = memory.getAvailable();//总内存ram.put("total", totalByte);ram.put("totalStr", formatByte(totalByte));//使用ram.put("used", (totalByte - availableByte));ram.put("usedStr", formatByte(totalByte - availableByte));//剩余内存ram.put("free", availableByte);ram.put("freeStr", formatByte(availableByte));//使用率ram.put("usageRate", new DecimalFormat("#.##").format((totalByte - availableByte) * 1.0 / totalByte));ram.put("usageRateStr", new DecimalFormat("#.##%").format((totalByte - availableByte) * 1.0 / totalByte));return ram;}/*** 系统jvm信息*/public static Map<String, Object> getJvmInfo() {Map<String, Object> cpuInfo = new HashMap<>();Properties props = System.getProperties();Runtime runtime = Runtime.getRuntime();long jvmTotalMemoryByte = runtime.totalMemory();long freeMemoryByte = runtime.freeMemory();//jvm总内存cpuInfo.put("total", formatByte(runtime.totalMemory()));//空闲空间cpuInfo.put("free", formatByte(runtime.freeMemory()));//jvm最大可申请cpuInfo.put("max", formatByte(runtime.maxMemory()));//vm已使用内存cpuInfo.put("user", formatByte(jvmTotalMemoryByte - freeMemoryByte));//jvm内存使用率cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((jvmTotalMemoryByte - freeMemoryByte) * 1.0 / jvmTotalMemoryByte));//jdk版本cpuInfo.put("jdkVersion", ((Properties) props).getProperty("java.version"));//jdk路径cpuInfo.put("jdkHome", props.getProperty("java.home"));return cpuInfo;}/*** 获取系统所有进程** @return*/public static List<Map<String, Object>> getOSProcess() {List<Map<String, Object>> infoList = new ArrayList<>();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");List<OSProcess> lists = operatingSystem.getProcesses();for (OSProcess process : lists) {Map<String, Object> info = new HashMap<>();// 进程更新时间info.put("updateTime", format.format(new Date(process.getStartTime() + process.getUpTime())));// 进程名称info.put("name", process.getName());// 进程用户info.put("user", process.getUser());// 进程IDinfo.put("id", process.getProcessID());// 文件地址info.put("path", process.getPath());// 位数info.put("bitness", process.getBitness());// 启动时间info.put("startTime", format.format(new Date(process.getStartTime())));infoList.add(info);}return infoList;}/*** 获取CPU信息** @return*/public static Map<String, Object> getCpuInfo() {Map<String, Object> info = new HashMap<>();CentralProcessor centralProcessor = hardware.getProcessor();// 逻辑处理器数量info.put("cpuLogicCount", centralProcessor.getLogicalProcessorCount());// 物理处理器数量info.put("cpuPhysicalCount", centralProcessor.getPhysicalProcessorCount());CentralProcessor.ProcessorIdentifier processor = centralProcessor.getProcessorIdentifier();// 获取CPU名称info.put("cpuName", processor.getName());// 获取CPU型号info.put("cpuModel", processor.getModel());// 获取家族info.put("cpuFamily", processor.getFamily());// 频率info.put("cpuFreq", processor.getVendorFreq());// 供货商info.put("cpuVendor", processor.getVendor());//  微架构info.put("cpuMicroarchitecture", processor.getMicroarchitecture());info.put("cpuId", processor.getProcessorID());// 步进info.put("cpuStepping", processor.getStepping());// 是否64位info.put("isCpu64bit", processor.isCpu64bit());return info;}/*** 格式化转换** @param byteNumber 传入byte* @return 格式化结果*/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);}public static void main(String[] args) throws InterruptedException {System.out.println(getCpuInfo());}
}

java 系统工具类 查询内存 CPU 系统基本信息 SysInfoUtils相关推荐

  1. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  2. 组织机构代码和统一社会信用代码校验规则以及java校验工具类

    组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...

  3. JAVA常用工具类(实用高效)

    JAVA常用工具类(根据GITHUB代码统计) 从Google你能搜索到大量的关于Struts,Spring,Hibernate,iBatis等比较大的框架的资料,但是很少有人去关注一些小的工具包,但 ...

  4. java 屏幕截图 工具类

    java 屏幕截图工具类,可以截取当前屏幕画面.保存图片格式支持jpg.png这2中格式,提供main函数测试.此类需要用到的地方很广,比如在CS系统中可以完成截图功能.相当于操作系统的截图功能,图片 ...

  5. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  6. Java生成图片工具类

    Java生成图片工具类 最初版本(仅提供思路,生成时间长,根据自己的需要自己优化) package com.xhpc.charging.station.utils.img;import java.aw ...

  7. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  8. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  9. java日期工具类DateUtil

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. DateUtil类 [java] view plain copy package com.util; ...

最新文章

  1. 深入理解C++中public、protected及private用法
  2. 中医研究登上Nature
  3. Android数据库 之 SQLite数据库
  4. c语言五子棋坐标覆盖,跪求C语言五子棋悔棋部分实现
  5. 另一种绕过 Android P以上非公开API限制的办法
  6. 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码
  7. Linux 7 pycurl.so: undefined symbol 解决方法
  8. 优化案例(part7)--Latent Multi-view Subspace Clustering
  9. 数列互质(莫队算法)
  10. RTX5 | 配置文件RTX_Config.h(一)
  11. el-tooltip位置不灵活_自由泳打腿不走水?一定中招了这些错误动作!
  12. Oracle checkpoint 说明
  13. Android applicationId与包名的区别
  14. shell里执行执行mysql 语句
  15. MySQL快速上手[学习笔记](二)
  16. 如何自学python-如何自学Python编程呢?老男孩Python学习方法
  17. Java开发工程师的发展前景如何?
  18. Android monkey 压力测试
  19. mysql数据中包含不间断空格(ascii值为194和160)解决办法
  20. python中词云图是用来描述_Python如何实现中国地图词云图

热门文章

  1. 移远BC35-G配置网络连接阿里云MQTT发送数据
  2. EasyExcel实现Mysql数据库Excel数据导出
  3. 微信小程序怎么样与mysql一起开发_莲米粒是一个基于PHP+MySQL+微信小程序技术栈...
  4. linux主机路由命令,linux下路由设置详解
  5. python抠图精确到发丝_ps抠图有一些发丝怎么扣
  6. StatsD与Graphite联合作战
  7. 对window的注册表进行优化
  8. 【linux】一篇全面的linux软件包管理的总结
  9. MYSQL里的DBS是什么_DBS-MySQL:MYSQL获取自增ID的四种方法
  10. Android 关于RemoteViews的理解(一)