代码
import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; import oshi.hardware.CentralProcessor.TickType; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; import oshi.util.FormatUtil; import oshi.util.Util; import java.util.Arrays; /** * os information test */ public class OshiTest { private static Logger logger = LoggerFactory.getLogger(OshiTest.class); @Test public void test() { SystemInfo si = new SystemInfo(); HardwareAbstractionLayer hal = si.getHardware(); logger.info("Checking Memory..."); printMemory(hal.getMemory()); logger.info("Checking CPU..."); printCpu(hal.getProcessor()); } private static void printMemory(GlobalMemory memory) { logger.info("memory avail:{} MB" , memory.getAvailable() / 1024 / 1024 );//memory avail:6863 MB logger.info("memory total:{} MB" , memory.getTotal() / 1024 / 1024 );//memory total:16384 MB } private static void printCpu(CentralProcessor processor) { logger.info(String.format("CPU load: %.1f%% (OS MXBean)%n", processor.getSystemCpuLoad() * 100));//CPU load: 24.9% (OS MXBean) logger.info("CPU load averages : {}", processor.getSystemLoadAverage());//CPU load averages : 1.5234375 logger.info("Uptime: " + FormatUtil.formatElapsedSecs(processor.getSystemUptime())); logger.info("Context Switches/Interrupts: " + processor.getContextSwitches() + " / " + processor.getInterrupts()); long[] prevTicks = processor.getSystemCpuLoadTicks(); logger.info("CPU, IOWait, and IRQ ticks @ 0 sec:" + Arrays.toString(prevTicks)); //Wait a second... Util.sleep(1000); long[] ticks = processor.getSystemCpuLoadTicks(); logger.info("CPU, IOWait, and IRQ ticks @ 1 sec:" + Arrays.toString(ticks)); long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; long sys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; long totalCpu = user + nice + sys + idle + iowait + irq + softirq + steal; logger.info(String.format( "User: %.1f%% Nice: %.1f%% System: %.1f%% Idle: %.1f%% IOwait: %.1f%% IRQ: %.1f%% SoftIRQ: %.1f%% Steal: %.1f%%%n", 100d * user / totalCpu, 100d * nice / totalCpu, 100d * sys / totalCpu, 100d * idle / totalCpu, 100d * iowait / totalCpu, 100d * irq / totalCpu, 100d * softirq / totalCpu, 100d * steal / totalCpu)); logger.info(String.format("CPU load: %.1f%% (counting ticks)%n", processor.getSystemCpuLoadBetweenTicks() * 100)); double[] loadAverage = processor.getSystemLoadAverage(3); logger.info("CPU load averages:" + (loadAverage[0] < 0 ? " N/A" : String.format(" %.2f", loadAverage[0])) + (loadAverage[1] < 0 ? " N/A" : String.format(" %.2f", loadAverage[1])) + (loadAverage[2] < 0 ? " N/A" : String.format(" %.2f", loadAverage[2]))); // per core CPU StringBuilder procCpu = new StringBuilder("CPU load per processor:"); double[] load = processor.getProcessorCpuLoadBetweenTicks(); for (double avg : load) { procCpu.append(String.format(" %.1f%%", avg * 100)); } logger.info(procCpu.toString()); } }
结果
16:03:08.573 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - Checking Memory...
16:03:10.592 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - memory avail:155 MB
16:03:10.594 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - memory total:4095 MB
16:03:10.594 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - Checking CPU...
16:03:10.772 [main] DEBUG oshi.hardware.common.AbstractCentralProcessor - Oracle MXBean detected.
16:03:12.319 [main] DEBUG oshi.hardware.platform.windows.WindowsCentralProcessor - Initialized Processor
16:03:12.322 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU load: 41.0% (OS MXBean)
16:03:12.322 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU load averages : -1.0
16:03:12.326 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - Uptime: 1 days, 20:39:54
16:03:12.328 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - Context Switches/Interrupts: 1714488866 / 570600239
16:03:12.330 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU, IOWait, and IRQ ticks @ 0 sec:[37287359, 0, 19608289, 234918099, 0, 520263, 600050, 0]
16:03:13.332 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU, IOWait, and IRQ ticks @ 1 sec:[37287421, 0, 19608313, 234920002, 0, 520263, 600057, 0]
16:03:13.333 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - User: 3.1% Nice: 0.0% System: 1.2% Idle: 95.3% IOwait: 0.0% IRQ: 0.0% SoftIRQ: 0.4% Steal: 0.0%
16:03:13.333 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU load: 19.8% (counting ticks)
16:03:13.333 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU load averages: N/A N/A N/A
16:03:13.337 [main] INFO org.apache.dolphinscheduler.common.os.OshiTest - CPU load per processor: 21.3% 18.3%
相关推荐
本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...
前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...
下面我们将详细探讨如何使用Java来获取CPU和内存信息。 首先,让我们了解一下Java中的`java.lang.management`包,这个包提供了管理和监视Java虚拟机以及操作系统的一些类和接口。通过`OperatingSystemMXBean`接口,...
Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU、内存、硬盘、进程等。下面将介绍两种获取系统信息的方法。 方法一:使用 Java ...
java 获取计算机cpu利用率和内存使用信息,需要的自己下载测试吧。
在Java编程中,获取CPU和内存信息是系统监控和性能分析的重要部分。下面将详细介绍如何使用Java来实现这一目标。 首先,我们从CPU信息开始。Java提供了`java.lang.management`包,该包中的`OperatingSystemMXBean`...
在IT领域,特别是对于系统监控和资源管理而言,掌握如何使用Java获取Linux系统的CPU和内存实时信息是一项重要的技能。这不仅有助于系统管理员实时监控服务器的健康状况,还为开发人员提供了优化应用程序性能的关键...
1. **CPU信息**:通过调用`CPUInfo`类的相关方法,可以获取CPU的总体使用率、每个核心的使用率等。这些信息对于监控系统的负载和性能至关重要。 2. **内存信息**:`MemoryInfo`类可以提供关于物理内存和虚拟内存的...
在Android平台上,获取CPU、内存和磁盘使用率信息对于开发者来说是十分重要的,这有助于监控设备性能,优化应用运行,以及提供用户友好的反馈。然而,由于Android系统的安全机制,不同的权限级别决定了你能获取到何...
在Java编程中,获取系统资源信息,如CPU使用率和内存使用情况,是常见的需求,尤其是在性能监控和问题排查时。以下将详细解释如何在Java中实现这些功能,并结合提供的代码片段进行说明。 首先,创建一个`...
在Java中,我们可以使用Java Native Interface(JNI)来调用Windows API,获得系统的内存信息和CPU使用率。我们可以使用GetSystemInfo函数来获得系统的内存信息,包括物理内存的大小、可用内存的大小和页面文件的...
在Android平台上,获取CPU使用率和内存实时数据是开发者进行性能监控、优化应用或实现系统监控功能的关键步骤。本文将详细介绍如何在Android中获取这些关键信息,并提供相关的代码示例。 首先,我们要理解CPU使用率...
Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU 信息、内存信息、硬盘信息、进程信息等。在实际开发中,这些信息往往是非常有用的,因为它们可以帮助开发者更好地优化程序的性能、监控系统的...
- 通过`sigar.getCpuPerc()`获取CPU使用百分比。 - 通过`sigar.getMem()`获取内存信息。 - 通过`sigar.getSwap()`获取交换空间信息。 - 循环遍历所有进程: - `long[] pids = sigarImpl.getProcList();`:获取...
本文将详细讲解如何使用Java来获取CPU、内存、硬盘等系统信息,以及如何读取IP地址和网络接口信息。我们将重点介绍`sigar.jar`库,这是一个强大的跨平台系统信息工具,它为Java提供了丰富的API来获取这些数据。 ...
在Java编程中,获取CPU和内存信息是系统监控和性能分析的重要部分。下面将详细讲解如何使用Java API来读取这些信息。 首先,对于内存信息的读取,Java提供了`java.lang.Runtime`类和`java.lang.management....
本项目利用SNMP协议来采集Windows和Linux服务器的CPU、内存以及磁盘信息,通过Java开发,采用SpringBoot框架构建一个完整的示例。 1. SNMP基础: SNMP由三部分组成:管理信息库(MIB)、管理站(Manager)和代理...
throw new Exception("无法获取CPU使用率"); } ``` 接下来,关于内存使用率的获取,由于`Win32_LogicalMemoryConfiguration`可能存在一些限制或不适用的情况,我们可以转而使用`Win32_PerfFormattedData_PerfOS_...