性能监控是javaweb后台管理系统经常用的功能,它的效果如下

怎么实现它的功能呢,当然少不了第三方jar包的引用,直接上maven代码

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

那怎么使用里面的api呢,在github里面可以参考他的测试例子
https://github.com/oshi/oshi/blob/master/oshicore/src/test/java/oshi/SystemInfoTest.java 以下是部分代码

public class SystemInfoTest { // NOSONAR squid:S5786private static final Logger logger = LoggerFactory.getLogger(SystemInfoTest.class);static List<String> oshi = new ArrayList<>();/*** Test that this platform is implemented..*/@Testvoid testPlatformEnum() {assertThat("Unsupported OS", SystemInfo.getCurrentPlatform(), is(not(PlatformEnum.UNKNOWN)));// Exercise the main methodmain(null);}/*** The main method, demonstrating use of classes.** @param args*            the arguments (unused)*/public static void main(String[] args) {logger.info("Initializing System...");SystemInfo si = new SystemInfo();HardwareAbstractionLayer hal = si.getHardware();OperatingSystem os = si.getOperatingSystem();printOperatingSystem(os);logger.info("Checking computer system...");printComputerSystem(hal.getComputerSystem());logger.info("Checking Processor...");printProcessor(hal.getProcessor());logger.info("Checking Memory...");printMemory(hal.getMemory());logger.info("Checking CPU...");printCpu(hal.getProcessor());logger.info("Checking Processes...");printProcesses(os, hal.getMemory());logger.info("Checking Services...");printServices(os);logger.info("Checking USB Devices...");printUsbDevices(hal.getUsbDevices(true));logger.info("Checking Sound Cards...");printSoundCards(hal.getSoundCards());logger.info("Checking Graphics Cards...");printGraphicsCards(hal.getGraphicsCards());StringBuilder output = new StringBuilder();for (int i = 0; i < oshi.size(); i++) {output.append(oshi.get(i));if (oshi.get(i) != null && !oshi.get(i).endsWith("\n")) {output.append('\n');}}logger.info("Printing Operating System and Hardware Info:{}{}", '\n', output);}private static void printOperatingSystem(final OperatingSystem os) {oshi.add(String.valueOf(os));oshi.add("Booted: " + Instant.ofEpochSecond(os.getSystemBootTime()));oshi.add("Uptime: " + FormatUtil.formatElapsedSecs(os.getSystemUptime()));oshi.add("Running with" + (os.isElevated() ? "" : "out") + " elevated permissions.");oshi.add("Sessions:");for (OSSession s : os.getSessions()) {oshi.add(" " + s.toString());}}private static void printComputerSystem(final ComputerSystem computerSystem) {oshi.add("System: " + computerSystem.toString());oshi.add(" Firmware: " + computerSystem.getFirmware().toString());oshi.add(" Baseboard: " + computerSystem.getBaseboard().toString());}private static void printProcessor(CentralProcessor processor) {oshi.add(processor.toString());}private static void printMemory(GlobalMemory memory) {oshi.add("Physical Memory: \n " + memory.toString());VirtualMemory vm = memory.getVirtualMemory();oshi.add("Virtual Memory: \n " + vm.toString());List<PhysicalMemory> pmList = memory.getPhysicalMemory();if (!pmList.isEmpty()) {oshi.add("Physical Memory: ");for (PhysicalMemory pm : pmList) {oshi.add(" " + pm.toString());}}}private static void printProcesses(OperatingSystem os, GlobalMemory memory) {OSProcess myProc = os.getProcess(os.getProcessId());// current process will never be null. Other code should check for null hereoshi.add("My PID: " + myProc.getProcessID() + " with affinity " + Long.toBinaryString(myProc.getAffinityMask()));oshi.add("Processes: " + os.getProcessCount() + ", Threads: " + os.getThreadCount());// Sort by highest CPUList<OSProcess> procs = os.getProcesses(ProcessFiltering.ALL_PROCESSES, ProcessSorting.CPU_DESC, 5);oshi.add("   PID  %CPU %MEM       VSZ       RSS Name");for (int i = 0; i < procs.size() && i < 5; i++) {OSProcess p = procs.get(i);oshi.add(String.format(" %5d %5.1f %4.1f %9s %9s %s", p.getProcessID(),100d * (p.getKernelTime() + p.getUserTime()) / p.getUpTime(),100d * p.getResidentSetSize() / memory.getTotal(), FormatUtil.formatBytes(p.getVirtualSize()),FormatUtil.formatBytes(p.getResidentSetSize()), p.getName()));}}private static void printServices(OperatingSystem os) {oshi.add("Services: ");oshi.add("   PID   State   Name");// DO 5 each of running and stoppedint i = 0;for (OSService s : os.getServices()) {if (s.getState().equals(OSService.State.RUNNING) && i++ < 5) {oshi.add(String.format(" %5d  %7s  %s", s.getProcessID(), s.getState(), s.getName()));}}i = 0;for (OSService s : os.getServices()) {if (s.getState().equals(OSService.State.STOPPED) && i++ < 5) {oshi.add(String.format(" %5d  %7s  %s", s.getProcessID(), s.getState(), s.getName()));}}}private static void printSensors(Sensors sensors) {oshi.add("Sensors: " + sensors.toString());}private static void printNetworkInterfaces(List<NetworkIF> list) {StringBuilder sb = new StringBuilder("Network Interfaces:");if (list.isEmpty()) {sb.append(" Unknown");} else {for (NetworkIF net : list) {sb.append("\n ").append(net.toString());}}oshi.add(sb.toString());}private static void printSoundCards(List<SoundCard> list) {oshi.add("Sound Cards:");for (SoundCard card : list) {oshi.add(" " + String.valueOf(card));}}
}

这时候点击main方法运行,如果操作系统是win10家庭版的小伙伴可能会遇到以下的问题,

初步一看,缺少JNA,什么是JNA呢?

JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。

简单来说就是是缺少了依赖jar包,那好办,直接百度这个错误,补上jar包

<jna.version>5.5.0</jna.version>
<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>${jna.version}</version>
</dependency>
<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna-platform</artifactId><version>${jna.version}</version>
</dependency>

这时候再运行

还是报错了!!,wtf 为什么呢,其实原因很简单,现在的版本已经出到5.6.0了 而百度上面的答案用的是更早以前的版本,这会造成jar包冲突。
问题解决方案很简单,直接换个匹配的版本就行,那怎么找到和目前版本匹配的jar包呢。。其实也很简单,我们直接上maven repository查找依赖就行
进入https://mvnrepository.com/ 查找oshi-core

往下拉找到其依赖,5.6.0依赖的版本是5.7.0
回到maven更换5.7.0 重新启动

控制台输出

,问题解决!!

oshi实现性能监控遇到的坑相关推荐

  1. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-GUI方式-Visual VM-JProfiler-Arthas

    00-谈GUI工具前的补充 补充1:内存泄漏 内存泄漏的理解与分类 何为内存泄漏( memory leak) 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用.那么对于这 ...

  2. .NetCore使用skywalking实现实时性能监控

    一.简介 很久之前写了一篇 <.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控>关于NetCore性能监控的文章,使用Inf ...

  3. ASP.NET Core之跨平台的实时性能监控(2.健康检查)

    前言 上篇我们讲了<如何使用App Metrics 做一个简单的APM监控>,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core ...

  4. 调优 | 别再说你不会 JVM 性能监控和调优了

    Hi ! 我是小小,今天是本周的最后一篇,本篇将会着重讲解关于 JVM 调优和性能监控方面的内容 常用工具 常用工具主要有 JDK 自带工具与 Arthas 这两种工具. JDK 自带工具 jps 虚 ...

  5. Android 系统性能优化(52)---移动端性能监控方案Hertz

    移动端性能监控方案Hertz 性能问题是造成App用户流失的罪魁祸首之一.App的性能问题包括崩溃.网络请求错误或超时.响应速度慢.列表滚动卡顿.流量大.耗电等等.而导致App性能低下的原因有很多,除 ...

  6. Dockerfile配置APM监控实现Java容器的性能监控

    通过Dockerfile可以用来构建容器镜像,我们一般也是通过这种方式来构建一个Tomcat应用服务容器,如果要实现对容器中的Tomcat服务(或是其他Java应用)进行APM(应用性能管理)监控,就 ...

  7. JVM下篇:性能监控与调优篇

    1. 概述篇 1.1. 大厂面试题 支付宝: 支付宝三面:JVM 性能调优都做了什么? 小米: 有做过 JVM 内存优化吗? 从 SQL.JVM.架构.数据库四个方面讲讲优化思路 蚂蚁金服: JVM ...

  8. JVM 下篇:性能监控与调优

    文章目录 性能优化三部曲 第1步(发现问题):性能监控 何时需要性能监控 第2步(排查问题):性能分析 第3步(解决问题):性能调优 性能评价/测试指标 JVM监控及诊断工具命令行 jps jstat ...

  9. JVM性能监控及调优篇

    一,概述 1,背景说明 1)生产环境中的问题 生产环境发生了内存溢出该如何处理 生产环境应该给服务器分配多少内存合适? 如何对垃圾回收器的性能进行调优? 生产环境CPU负载飙高该如何处理? 生产环境应 ...

最新文章

  1. Android官方命令深入分析之Device Monitor
  2. [LeetCode]Gray Code
  3. python编程 语言-python编程语言有什么用途
  4. 深度学习元老Yann Lecun详解卷积神经网络
  5. 【NLP-ChatBot】能干活的聊天机器人-对话系统概述
  6. 区分'方法'和'函数'
  7. 前端学习(3279):循环 遍历 2
  8. linuxoracle查看用户权限_实现Oracle授予用户权限的一个实例
  9. 【Codeforces 1421 D】Hexagons,贪心,模拟
  10. win10升级助手_Win10系统易升如何彻底关闭?「系统天地」
  11. w10不能访问网络计算机,Win10无法联网提示“无法访问您可能没有权限使用网络资源”怎么办...
  12. 为什么许多器件的片选信号低电平有效,而不是高电平有效?
  13. python3 英文字母单数转复数
  14. 燕青分布式系统开发之分布式事务解决方案视频(2天)
  15. Java调试--排查类工具
  16. SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式
  17. 读书笔记软件调试之道 :问题的核心-如何修复缺陷
  18. Docker从入门到放弃-----Dockerfile常用命令解析与实战(使用docker制作一个开箱即用的consul镜像)
  19. 如何在WordPress中删除谷歌字体(2种简单方法)
  20. 003数据驱动json

热门文章

  1. PHP输出时间精确到毫秒
  2. java下载sun包下的源码
  3. 都指望着从中国消费市场捞一笔?
  4. HMM在语音识别中的应用
  5. 工业机器人打磨抛光编程员工资_跟你聊聊工业机器人行业的真实工资
  6. JQuery checkedBox全选和全部选
  7. taobao有用户研究团队吗?
  8. Python计算机视觉编程第二章——局部图像描述子
  9. Python 图片处理
  10. Python在竞赛中的应用-测试数据的构造与对拍 --算法专题精解(31)