最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

通過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)

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

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

可以通過執(zhí)行系統(tǒng)命令(如top, df, free等)獲取系統(tǒng)信息,使用ProcessBuilder來運(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();
        }
    }
}

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

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

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

可以使用top或mpstat命令來獲取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命令來獲取磁盤使用情況:

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)文章

  • SpringMVC執(zhí)行過程詳細(xì)講解

    SpringMVC執(zhí)行過程詳細(xì)講解

    MVC是一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)組件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯,MVC分層有助于管理和架構(gòu)復(fù)雜的應(yīng)用程序
    2022-08-08
  • Java8接口的默認(rèn)方法

    Java8接口的默認(rèn)方法

    這篇文章主要為大家介紹了Java8接口的默認(rèn)方法,還為大家默認(rèn)方法的多重繼承,感興趣的朋友可以參考一下
    2016-01-01
  • java聯(lián)系人管理系統(tǒng)簡(jiǎn)單設(shè)計(jì)

    java聯(lián)系人管理系統(tǒng)簡(jiǎn)單設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java聯(lián)系人管理系統(tǒng)簡(jiǎn)單設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 關(guān)于Springboot中JSCH的使用及說明

    關(guān)于Springboot中JSCH的使用及說明

    這篇文章主要介紹了關(guān)于Springboot中JSCH的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-09-09
  • 詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系

    詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系

    這篇文章主要介紹了詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系,本文先對(duì)兩種方法作了介紹,然后對(duì)二者聯(lián)系進(jìn)行分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot打印詳細(xì)啟動(dòng)異常信息

    SpringBoot打印詳細(xì)啟動(dòng)異常信息

    這篇文章主要介紹了SpringBoot打印詳細(xì)啟動(dòng)異常信息,本文包含了詳細(xì)的過程解析與案例,概要的說明了如何去使用打印啟動(dòng)異常信息,需要的朋友可以參考下
    2021-06-06
  • spring data jpa 查詢自定義字段,轉(zhuǎn)換為自定義實(shí)體方式

    spring data jpa 查詢自定義字段,轉(zhuǎn)換為自定義實(shí)體方式

    這篇文章主要介紹了spring data jpa 查詢自定義字段,轉(zhuǎn)換為自定義實(shí)體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java項(xiàng)目中使用 Lombok遇到的問題小結(jié)

    java項(xiàng)目中使用 Lombok遇到的問題小結(jié)

    這篇文章主要介紹了java項(xiàng)目中使用 Lombok遇到的問題小結(jié),需要的朋友可以參考下
    2018-07-07
  • Spring基于常用AspectJ切點(diǎn)表達(dá)式使用介紹

    Spring基于常用AspectJ切點(diǎn)表達(dá)式使用介紹

    AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說

    Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說

    這篇文章主要介紹了Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

泾阳县| 改则县| 苍梧县| 崇明县| 洛浦县| 宾川县| 日土县| 项城市| 静安区| 平邑县| 岱山县| 石景山区| 津南区| 台湾省| 尉氏县| 河间市| 和田市| 伊春市| 余庆县| 阜平县| 资中县| 喀喇| 江都市| 澎湖县| 上虞市| 青州市| 平舆县| 天峨县| 怀集县| 安陆市| 阳西县| 寿光市| 浮梁县| 文登市| 正安县| 马鞍山市| 井研县| 黎川县| 东丽区| 方城县| 抚松县|