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

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

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

使用 Java Management API

通過Java自帶的ManagementFactory和MXBean接口獲取系統(tǒng)級別信息,如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");
    }
}

使用第三方庫OSHI

OSHI:一個強大的Java庫,用于獲取操作系統(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來運行命令并獲取輸出。

示例代碼:

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)命令并獲取輸出。以下是實現(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)控

可以將這些功能組合到一個程序中,以便在定時任務(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

    MVC是一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個組件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(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)簡單設(shè)計

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

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

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

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

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

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

    SpringBoot打印詳細啟動異常信息

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

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

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

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

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

    Spring基于常用AspectJ切點表達式使用介紹

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

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

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

最新評論

山阳县| 凤冈县| 合肥市| 通许县| 浮山县| 玉溪市| 密山市| 昌邑市| 庆阳市| 深州市| 汕头市| 达日县| 宽甸| 平阴县| 巴马| 阜宁县| 阿坝| 平乡县| 武穴市| 桂林市| 延庆县| 清河县| 襄垣县| 湖北省| 张掖市| 读书| 古交市| 高雄市| 吴桥县| 鄂伦春自治旗| 江门市| 广昌县| 自治县| 涪陵区| 乐安县| 平邑县| 扎赉特旗| 平山县| 犍为县| 铅山县| 云林县|