服务器性能监控,就靠它了!

开源小分队设为星标 精品文章第一时间读

大家好,我是撸码撸得头晕的开源大叔。

之前大叔一直在维护公司内部使用的服务监控系统,不过因为有新的开发任务,所以需要暂时把手里这套系统交接给新来的小朋友开发维护了。在交接讲解的过程中,发现对于服务器硬件参数监控的方式,使用了开源的 OSHI。大叔一拍大腿,这是个好东西啊!所以在这里分享给大家。

项目简介

OSHI 是一个基于 JNA(本地)的免费的操作系统和硬件信息库,专为 Java 设计。它可以跨平台的获取系统信息以及硬件信息,如操作系统版本、进程、内存和 CPU 使用情况、磁盘和分区、设备、传感器等。它不需要安装任何额外的本地库,因此接入起来很方便。

项目使用

Maven 依赖

我们通过配置 Maven 依赖来引入 OSHI,如下所示:

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

这里注意的是,不同版本的 JDK 环境,需要引用不同版本的包:

  • JDK8: oshi-core-6.4.0
  • JPMS: oshi-core-java11-6.4.0
  • JDK6: oshi-core-3.14.0

简单的例子

在这里大叔写一个简单的例子,包括了一些常用硬件参数的获取,注释已经写的很详细了:

public static void main(String[] args) {
    // 系统信息类
    SystemInfo systemInfo = new SystemInfo();
    // 获取硬件信息
    HardwareAbstractionLayer hardware = systemInfo.getHardware();

    // CPU信息
    CentralProcessor centralProcessor = hardware.getProcessor();
    // 获取CPU名称
    String name = centralProcessor.getProcessorIdentifier().getName();
    // 获取CPU核心数
    int physicalProcessorCount = centralProcessor.getPhysicalProcessorCount();
    // 获取当前CPU每个核心的频率
    long[] currentFreq = centralProcessor.getCurrentFreq();
    System.out.println("CPU名称:" + name);
    System.out.println("CPU核心数:" + physicalProcessorCount);

    // 内存信息
    GlobalMemory memory = hardware.getMemory();
    // 内存总大小
    long totalOfG = memory.getTotal() / 1024 / 1024 / 1024;
    // 可用大小
    long availableOfG = memory.getAvailable() / 1024 / 1024 / 1024;
    System.out.println("内存总大小:" + totalOfG + "G");
    System.out.println("内存可用大小:" + availableOfG + "G");

    // 磁盘信息
    List<HWDiskStore> diskStores = hardware.getDiskStores();
    // 获取磁盘总大小
    long total = diskStores.stream().mapToLong(HWDiskStore::getSize).sum();
    System.out.println("磁盘总大小:" + total / 1024 / 1024 / 1024 + "G");

    // 系统运行时间
    long uptimeInSeconds = systemInfo.getOperatingSystem().getSystemUptime();
    System.out.println("系统运行时间:" + uptimeInSeconds / 3600 + "小时");
}

在本地运行之后输出如下:

一个漂亮的仪表盘

看过上面的例子,你会发现 OSHI 其实很好用吧。但是只有一个例子的展示大家应该不太满足,所以大叔我特意找了一个已经开发好的监控工具——Ward。Ward 是一款简单、极简主义的服务器监控工具。它用漂亮的仪表盘的形式来展示系统的硬件信息。如图所示:

其实 Ward 是一个很简单的 springboot 项目,借助于该项目,简单阅读下源码就能更好的理解 OSHI 的使用啦。

总结

今天给大家介绍了 OSHI 的使用方式,以及另一个使用 OSHI 的 Web 服务。感兴趣的朋友们可以亲自体验一下哈,项目地址都放到下面了:

-- OSHI
https://github.com/oshi/oshi
-- Ward
https://github.com/Rudolf-Barbu/Ward

写在最后

欢迎加入开源小分队读者交流群,聊天学习摸鱼为主,不定时会分享一些技术要点和优质学习资源,有一群有趣有料的小伙伴在等你哦!进群方式:公众号后台回复888,按提示操作即可进群。问君能有几多愁,开源项目解千愁,我们下期再见!
大家的点赞、收藏和评论对大叔非常重要,如文章对你有帮助还请转发支持下,谢谢!

相关推荐

  • Java 集合 Stream 流操作的基本使用教程
  • 精确控制 AI 图像生成的破冰方案,ControlNet 和 T2I-Adapter
  • 学透Spring,一次就够了
  • EXPLAIN进行索引分析和优化
  • 迷倒李冰冰,火遍全国!“顶级男神”自爆重病,无法治愈:余生,我会好好爱自己
  • 快手是如何利用Bandits算法,助力业务提升数十倍的?
  • 旅美20年后,“顶级女巨星”现状曝光!与粪便同住,全网震惊:求求了,放过她吧
  • MySQL的索引实现原理
  • 开源版GPT-3来了?Meta发布LLaMa,多数任务效果超越GPT-3,已开源
  • 我把跨境电商当副业,两年全款买了房:2023年这个风口赚钱,90%的人不知道
  • 走访中国最偏远地级市,闻到都是钱味
  • 中年以后,请过低温的生活
  • Spring Cloud 与响应式微服务
  • Linux 6.2 正式发布:首次原生支持苹果 M1 芯片
  • 为什么研发管理必须要数字化?| 极客时间企业版
  • 被Gartner列为“2023年十大战略技术趋势”,爆火的可观测如何正确落地?
  • 10万字Linux常用命令总结,果断收藏!
  • 大公司为什么禁止在SpringBoot项目中使用@Autowired注解?
  • 阿里高级专家:我对技术架构的理解
  • 聊聊对大模型的一些看法