oshi监控服务器数据

获取jvm数据

jvm数据是监控应用很重要的一系列参数,一般本地开发的时候可以通过jconsole来连到对应的进程上面,查看相关指标数据,但是在线上环境就不适合通过jconsole来查看了, 所以我们现在使用通过java代码来获得数据,然后上报出去,然后在外部通过展示。

那么如何通过java代码来得到这些参数呢?

获得jvm的堆内存代码

MemoryUsage heapMemoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
System.out.println("jvm.heap.init is " + (heapMemoryUsage.getInit()));
System.out.println("jvm.heap.used is " + (heapMemoryUsage.getUsed()));
System.out.println("jvm.heap.committed is " + (heapMemoryUsage.getCommitted()));
System.out.println("jvm.heap.max is " + (heapMemoryUsage.getMax()));

获得jvm的非堆内存代码

MemoryUsage nonHeapMemoryUsage = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage();
System.out.println("jvm.nonheap.init is " + (nonHeapMemoryUsage.getInit()));
System.out.println("jvm.nonheap.used is " + (nonHeapMemoryUsage.getUsed()));
System.out.println("jvm.nonheap.committed is " + (nonHeapMemoryUsage.getCommitted()));
System.out.println("jvm.nonheap.max is " + (nonHeapMemoryUsage.getMax()));

上面的方法只能得到jvm的堆和非堆的整体数据,一般都知道堆和非堆里面都几个不同的区,用来做不同功能,那么如何得到不同区的数据呢?不多说,上代码

for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {  
final String kind = pool.getType() == MemoryType.HEAP ? "heap" : "nonheap";  
final MemoryUsage usage = pool.getUsage();  
System.out.println("kind is " + kind + ", pool name is " + pool.getName() + ", jvm." + pool.getName() + ".init is " + usage.getInit());  
System.out.println("kind is " + kind + ", pool name is " + pool.getName() + ", jvm." + pool.getName() + ".used is " + usage.getUsed());  
System.out.println("kind is " + kind + ", pool name is " + pool.getName() + ", jvm." + pool.getName()+ ".committed is " + usage.getCommitted());  
System.out.println("kind is " + kind + ", pool name is " + pool.getName() + ", jvm." + pool.getName() + ".max is " + usage.getMax()); 
}

这样就可以得到各种区的具体参数。

 

1,导入依赖

<!-- https://mvnrepository.com/artifact/com.github.oshi/oshi-core -->
<dependency>
    <groupId>com.github.oshi</groupId>
    <artifactId>oshi-core</artifactId>
    <version>5.2.5</version>
</dependency>
2,导入文件包

链接:https://pan.baidu.com/s/1TfLP8-mNmI1h0oCOhOKbtg
提取码:q8vn
复制这段内容后打开百度网盘手机App,操作更方便哦

3,创建server调用copyTo()方法就可以获得数据,数据在server中

 
  1. Server server = new Server();

  2. server.copyTo();

效果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一种快速开发的方式。而OSHI是一个Java库,用于获取系统信息,如操作系统、硬件和进程信息。 在Spring Boot中使用OSHI可以方便地获取系统信息并进行处理。你可以通过引入OSHI的依赖来使用它,例如在Maven项目中添加以下依赖: ```xml <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>5.7.4</version> </dependency> ``` 然后,你可以在Spring Boot应用程序中使用OSHI提供的API来获取系统信息。例如,你可以使用`SystemInfo`类来获取操作系统信息,使用`HardwareAbstractionLayer`类来获取硬件信息,使用`GlobalMemory`类来获取内存信息等等。 以下是一个简单的示例代码,展示了如何在Spring Boot应用程序中使用OSHI获取系统信息: ```java import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.GlobalMemory; @RestController public class SystemInfoController { @GetMapping("/system-info") public String getSystemInfo() { SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory memory = hardware.getMemory(); String os = systemInfo.getOperatingSystem().toString(); long totalMemory = memory.getTotal(); long availableMemory = memory.getAvailable(); return "Operating System: " + os + "\n" + "Total Memory: " + totalMemory + " bytes\n" + "Available Memory: " + availableMemory + " bytes"; } } ``` 这个示例代码中,我们创建了一个`SystemInfoController`类,其中的`getSystemInfo()`方法使用OSHI获取操作系统和内存信息,并将其返回为字符串。 希望这个简单的介绍能够帮助你了解Spring Boot和OSHI的基本用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值