`
gaojingsong
  • 浏览: 1200757 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA之获取CPU/内存信息】

 
阅读更多

代码


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获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    Java如何获取系统cpu、内存、硬盘信息

     前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...

    Java获取计算机CPU、内存等信息

    下面我们将详细探讨如何使用Java来获取CPU和内存信息。 首先,让我们了解一下Java中的`java.lang.management`包,这个包提供了管理和监视Java虚拟机以及操作系统的一些类和接口。通过`OperatingSystemMXBean`接口,...

    Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法.pdf

    Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU、内存、硬盘、进程等。下面将介绍两种获取系统信息的方法。 方法一:使用 Java ...

    java获取计算机cpu利用率和内存使用

    java 获取计算机cpu利用率和内存使用信息,需要的自己下载测试吧。

    java获取cpu、内存信息

    在Java编程中,获取CPU和内存信息是系统监控和性能分析的重要部分。下面将详细介绍如何使用Java来实现这一目标。 首先,我们从CPU信息开始。Java提供了`java.lang.management`包,该包中的`OperatingSystemMXBean`...

    用java取得linux系统cpu、内存的实时信息

    在IT领域,特别是对于系统监控和资源管理而言,掌握如何使用Java获取Linux系统的CPU和内存实时信息是一项重要的技能。这不仅有助于系统管理员实时监控服务器的健康状况,还为开发人员提供了优化应用程序性能的关键...

    java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

    1. **CPU信息**:通过调用`CPUInfo`类的相关方法,可以获取CPU的总体使用率、每个核心的使用率等。这些信息对于监控系统的负载和性能至关重要。 2. **内存信息**:`MemoryInfo`类可以提供关于物理内存和虚拟内存的...

    Android获取cpu,内存,磁盘使用率信息

    在Android平台上,获取CPU、内存和磁盘使用率信息对于开发者来说是十分重要的,这有助于监控设备性能,优化应用运行,以及提供用户友好的反馈。然而,由于Android系统的安全机制,不同的权限级别决定了你能获取到何...

    java中获取CPU 内存的方法

    在Java编程中,获取系统资源信息,如CPU使用率和内存使用情况,是常见的需求,尤其是在性能监控和问题排查时。以下将详细解释如何在Java中实现这些功能,并结合提供的代码片段进行说明。 首先,创建一个`...

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    在Java中,我们可以使用Java Native Interface(JNI)来调用Windows API,获得系统的内存信息和CPU使用率。我们可以使用GetSystemInfo函数来获得系统的内存信息,包括物理内存的大小、可用内存的大小和页面文件的...

    android 获取cpu使用率, 内存 实时数据

    在Android平台上,获取CPU使用率和内存实时数据是开发者进行性能监控、优化应用或实现系统监控功能的关键步骤。本文将详细介绍如何在Android中获取这些关键信息,并提供相关的代码示例。 首先,我们要理解CPU使用率...

    Java获取系统信息(cpu_内存_硬盘_进程等)的相关方法

    Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU 信息、内存信息、硬盘信息、进程信息等。在实际开发中,这些信息往往是非常有用的,因为它们可以帮助开发者更好地优化程序的性能、监控系统的...

    java获取各进程的信息

    - 通过`sigar.getCpuPerc()`获取CPU使用百分比。 - 通过`sigar.getMem()`获取内存信息。 - 通过`sigar.getSwap()`获取交换空间信息。 - 循环遍历所有进程: - `long[] pids = sigarImpl.getProcList();`:获取...

    java获取系统信息(cpu,内存,硬盘)方法及jar包

    本文将详细讲解如何使用Java来获取CPU、内存、硬盘等系统信息,以及如何读取IP地址和网络接口信息。我们将重点介绍`sigar.jar`库,这是一个强大的跨平台系统信息工具,它为Java提供了丰富的API来获取这些数据。 ...

    java读取CPU内存信息

    在Java编程中,获取CPU和内存信息是系统监控和性能分析的重要部分。下面将详细讲解如何使用Java API来读取这些信息。 首先,对于内存信息的读取,Java提供了`java.lang.Runtime`类和`java.lang.management....

    snmp协议采集windows和linux服务器cpu/内存/磁盘信息。

    本项目利用SNMP协议来采集Windows和Linux服务器的CPU、内存以及磁盘信息,通过Java开发,采用SpringBoot框架构建一个完整的示例。 1. SNMP基础: SNMP由三部分组成:管理信息库(MIB)、管理站(Manager)和代理...

    WMI获取远程服务器CPU,内存使用率函数源代码

    throw new Exception("无法获取CPU使用率"); } ``` 接下来,关于内存使用率的获取,由于`Win32_LogicalMemoryConfiguration`可能存在一些限制或不适用的情况,我们可以转而使用`Win32_PerfFormattedData_PerfOS_...

Global site tag (gtag.js) - Google Analytics