欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java獲取Linux服務(wù)器CPU、內(nèi)存、磁盤信息的示例詳解

 更新時(shí)間:2025年06月09日 09:39:05   作者:思靜魚  
本文介紹了使用Java內(nèi)置API、第三方庫(kù)OSHI及JMX和命令行工具監(jiān)控Linux服務(wù)器CPU、內(nèi)存、磁盤等系統(tǒng)信息的方法,并提供示例代碼實(shí)現(xiàn)整合監(jiān)控功能,需要的朋友可以參考下

使用 Java Management API

通過(guò)Java自帶的ManagementFactory和MXBean接口獲取系統(tǒng)級(jí)別信息,如CPU負(fù)載和內(nèi)存使用情況。

示例代碼:

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.MemoryMXBean;

public class SystemMonitor {
    public static void main(String[] args) {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();

        System.out.println("CPU負(fù)載: " + osBean.getSystemLoadAverage());
        System.out.println("堆內(nèi)存使用: " + memoryBean.getHeapMemoryUsage().getUsed() + " bytes");
    }
}

使用第三方庫(kù)OSHI

OSHI:一個(gè)強(qiáng)大的Java庫(kù),用于獲取操作系統(tǒng)和硬件信息,支持CPU、內(nèi)存、磁盤等監(jiān)控。示例代碼:

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.software.os.OperatingSystem;

public class SystemMonitor {
    public static void main(String[] args) {
        SystemInfo systemInfo = new SystemInfo();
        CentralProcessor processor = systemInfo.getHardware().getProcessor();
        OperatingSystem os = systemInfo.getOperatingSystem();

        System.out.println("CPU負(fù)載: " + processor.getSystemCpuLoadBetweenTicks() * 100 + "%");
        System.out.println("總內(nèi)存: " + systemInfo.getHardware().getMemory().getTotal() + " bytes");
    }
}
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import oshi.software.os.FileSystem;
import oshi.software.os.OSFileStore;
import oshi.software.os.NetworkIF;
import oshi.software.os.OperatingSystem;
import oshi.software.os.OperatingSystemVersion;

public class SystemMetrics {

    public static void main(String[] args) {
        SystemInfo systemInfo = new SystemInfo();
        CentralProcessor processor = systemInfo.getHardware().getProcessor();
        GlobalMemory memory = systemInfo.getHardware().getMemory();
        OperatingSystem os = systemInfo.getOperatingSystem();
        FileSystem fileSystem = os.getFileSystem();
        NetworkIF[] networkIFs = os.getNetworkIFs();

        // CPU 使用率
        double cpuLoad = processor.getSystemCpuLoad() * 100;
        System.out.println("CPU Load: " + cpuLoad + "%");

        // 內(nèi)存使用情況
        long totalMemory = memory.getTotal();
        long usedMemory = totalMemory - memory.getAvailable();
        System.out.println("Used Memory: " + (usedMemory / (1024 * 1024)) + " MB");
        System.out.println("Total Memory: " + (totalMemory / (1024 * 1024)) + " MB");

        // 磁盤使用情況
        for (OSFileStore fileStore : fileSystem.getFileStores()) {
            System.out.println("Disk: " + fileStore.getMount() +
                    ", Total: " + (fileStore.getTotalSpace() / (1024 * 1024)) + " MB" +
                    ", Usable: " + (fileStore.getUsableSpace() / (1024 * 1024)) + " MB" +
                    ", Used: " + ((fileStore.getTotalSpace() - fileStore.getUsableSpace()) / (1024 * 1024)) + " MB");
        }

        // 網(wǎng)絡(luò)帶寬使用情況
        for (NetworkIF net : networkIFs) {
            long[] prevIO = net.getBytesRecv();
            long[] currIO = net.getBytesSent();
            System.out.println("Network Interface: " + net.getName());
            System.out.println("Received: " + (prevIO[0] / 1024) + " KB, Sent: " + (currIO[0] / 1024) + " KB");
        }
    }
}

使用 JMX(Java Management Extensions)

可以通過(guò)JMX監(jiān)控Java應(yīng)用的性能指標(biāo),并可以監(jiān)控JVM自身的內(nèi)存和線程使用情況。

使用命令行工具ProcessBuilder或Runtime.exec()

可以通過(guò)執(zhí)行系統(tǒng)命令(如top, df, free等)獲取系統(tǒng)信息,使用ProcessBuilder來(lái)運(yùn)行命令并獲取輸出。

示例代碼:

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

public class CommandLineMonitor {
    public static void main(String[] args) {
        try {
            Process process = new ProcessBuilder("sh", "-c", "top -bn1 | grep 'Cpu'").start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

來(lái)執(zhí)行系統(tǒng)命令并獲取輸出

在Java中使用命令行工具監(jiān)控服務(wù)器的CPU、內(nèi)存和磁盤使用情況,可以通過(guò)ProcessBuilder或Runtime.exec()來(lái)執(zhí)行系統(tǒng)命令并獲取輸出。以下是實(shí)現(xiàn)的示例代碼:

1. 監(jiān)控CPU使用情況

可以使用top或mpstat命令來(lái)獲取CPU使用情況。以下示例使用top命令:

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

public class CpuMonitor {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("sh", "-c", "top -bn1 | grep 'Cpu'");
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("CPU使用情況: " + line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 監(jiān)控內(nèi)存使用情況

可以使用free命令獲取內(nèi)存使用情況:

public class MemoryMonitor {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("sh", "-c", "free -h");
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("內(nèi)存使用情況: " + line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 監(jiān)控磁盤使用情況

可以使用df命令來(lái)獲取磁盤使用情況:

public class DiskMonitor {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("sh", "-c", "df -h");
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("磁盤使用情況: " + line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 組合監(jiān)控

可以將這些功能組合到一個(gè)程序中,以便在定時(shí)任務(wù)中執(zhí)行:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SystemMonitor {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        
        scheduler.scheduleAtFixedRate(() -> {
            monitorCpu();
            monitorMemory();
            monitorDisk();
        }, 0, 10, TimeUnit.SECONDS);
    }

    private static void monitorCpu() {
        executeCommand("top -bn1 | grep 'Cpu'");
    }

    private static void monitorMemory() {
        executeCommand("free -h");
    }

    private static void monitorDisk() {
        executeCommand("df -h");
    }

    private static void executeCommand(String command) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("sh", "-c", command);
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

到此這篇關(guān)于Java獲取Linux服務(wù)器CPU、內(nèi)存、磁盤信息的示例詳解的文章就介紹到這了,更多相關(guān)Java獲取Linux信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot hutool整合email的詳細(xì)過(guò)程

    spring boot hutool整合email的詳細(xì)過(guò)程

    這篇文章主要介紹了spring boot hutool整合email的相關(guān)知識(shí),本文介紹兩種方式發(fā)送email文件,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Java中List集合對(duì)象去重及按屬性去重的8種方法

    Java中List集合對(duì)象去重及按屬性去重的8種方法

    這篇文章主要介紹了Java中List集合對(duì)象去重及按屬性去重的8種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一地的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 圖文詳解java內(nèi)存回收機(jī)制

    圖文詳解java內(nèi)存回收機(jī)制

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了java內(nèi)存回收機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java實(shí)現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    Java實(shí)現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    這篇文章主要介紹了Java如何實(shí)現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)java有一定的幫助,感興趣的同學(xué)可以了解一下
    2021-12-12
  • java Comparator.comparing排序使用示例

    java Comparator.comparing排序使用示例

    本文主要介紹了java Comparator.comparing排序使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java JSONArray 遍歷方式(2種)

    java JSONArray 遍歷方式(2種)

    這篇文章主要介紹了java JSONArray 遍歷方式(2種),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊

    SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊的相關(guān)資料,有一定的實(shí)用性,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mybatis?實(shí)現(xiàn)字段大小寫賦值

    mybatis?實(shí)現(xiàn)字段大小寫賦值

    這篇文章主要介紹了mybatis?實(shí)現(xiàn)字段大小寫賦值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java 集合的Contains和Remove方法

    Java 集合的Contains和Remove方法

    這篇文章主要介紹了Java 集合Contains和Remove方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Maven設(shè)置使用自定義的jar包到自己本地倉(cāng)庫(kù)

    Maven設(shè)置使用自定義的jar包到自己本地倉(cāng)庫(kù)

    今天小編就為大家分享一篇關(guān)于Maven設(shè)置使用自定義的jar包到自己本地倉(cāng)庫(kù)的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10

最新評(píng)論