Java实时获取CPU和内存占用

在Java开发中,我们经常需要获取当前系统的CPU和内存占用情况,以便进行性能监控、资源管理等操作。本文将介绍如何使用Java代码实时获取CPU和内存的占用情况,并通过状态图和甘特图来展示相关示例。

获取CPU占用率

要获取CPU占用率,我们可以通过操作系统提供的系统调用或命令行工具来实现,然后使用Java代码来执行这些命令并获取结果。

以下是使用Java代码获取CPU占用率的示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CpuUsageMonitor {

    public static float getSystemCpuUsage() {
        try {
            Process process = Runtime.getRuntime().exec("top -b -n 1");
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.startsWith("Cpu(s)")) {
                    String[] tokens = line.split("\\s+");
                    float idleCpuUsage = Float.parseFloat(tokens[5]);
                    float nonIdleCpuUsage = Float.parseFloat(tokens[2]) + Float.parseFloat(tokens[3]) + Float.parseFloat(tokens[4]);
                    float totalCpuUsage = idleCpuUsage + nonIdleCpuUsage;
                    return totalCpuUsage;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0.0f;
    }

    public static void main(String[] args) {
        float cpuUsage = getSystemCpuUsage();
        System.out.println("CPU Usage: " + cpuUsage + "%");
    }
}

在上述示例代码中,我们使用top -b -n 1命令获取CPU占用率,并解析命令输出中的关键信息来计算总的CPU占用率。通过Runtime.getRuntime().exec()方法可以执行系统命令,并通过InputStreamReaderBufferedReader来读取命令的输出结果。

获取内存占用量

要获取内存占用量,我们可以通过Java的ManagementFactory类中的getOperatingSystemMXBean()方法来获取操作系统的相关信息,包括内存使用情况。

以下是使用Java代码获取内存占用量的示例:

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;

public class MemoryUsageMonitor {

    public static long getTotalMemorySize() {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        return osBean.getTotalPhysicalMemorySize();
    }

    public static long getFreeMemorySize() {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        return osBean.getFreePhysicalMemorySize();
    }

    public static long getUsedMemorySize() {
        return getTotalMemorySize() - getFreeMemorySize();
    }

    public static void main(String[] args) {
        long totalMemory = getTotalMemorySize();
        long freeMemory = getFreeMemorySize();
        long usedMemory = getUsedMemorySize();
        System.out.println("Total Memory: " + totalMemory + " bytes");
        System.out.println("Free Memory: " + freeMemory + " bytes");
        System.out.println("Used Memory: " + usedMemory + " bytes");
    }
}

在上述示例代码中,我们使用ManagementFactory.getOperatingSystemMXBean()方法获取操作系统的相关信息,然后通过该对象的方法来获取内存的总量、空闲量和已使用量。

状态图

下面是一个使用mermaid语法绘制的状态图,展示了获取CPU和内存占用情况的过程。

stateDiagram
    [*] --> Start
    Start --> GetCPUUsage
    GetCPUUsage --> GetMemoryUsage
    GetMemoryUsage --> [*]

在上述状态图中,我们首先开始获取CPU占用率,然后再获取内存占用量,最后返回到起始状态。

甘特图

下面是一个使用mermaid语法绘制的甘特图,展示了获取CPU和内存占用情况的时间分布。

gantt
    dateFormat  YYYY-MM-DD
    title CPU and Memory Usage

    section CPU
    Get CPU Usage         :done, 2022-01-01, 1d
    Calculate CPU Usage   :done, 2022-01-02, 1d
    Display CPU Usage     :done, 2022-01-03, 1d

    section Memory
    Get Memory Usage      :done, 2022-01-01, 1d
    Calculate Memory Usage:done, 2022