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

監(jiān)控Spring Boot 項(xiàng)目運(yùn)行情況操作方法

 更新時(shí)間:2024年08月28日 10:52:12   作者:nihui123  
在實(shí)際開發(fā)中,經(jīng)常會(huì)遇到想要獲取到服務(wù)器應(yīng)用的運(yùn)行情況的場(chǎng)景,在微服務(wù)架構(gòu)下對(duì)于每個(gè)應(yīng)用運(yùn)行情況的監(jiān)控是保證系統(tǒng)高可用的關(guān)鍵,本文給大家介紹如何實(shí)現(xiàn)在Spring Boot的jar包中對(duì)系統(tǒng)的運(yùn)行情況進(jìn)行監(jiān)控操作,感興趣的朋友跟隨小編一起看看吧

導(dǎo)語(yǔ)

在實(shí)際開發(fā)中,經(jīng)常會(huì)遇到想要獲取到服務(wù)器應(yīng)用的運(yùn)行情況的場(chǎng)景。在微服務(wù)架構(gòu)下對(duì)于每個(gè)應(yīng)用運(yùn)行情況的監(jiān)控是保證系統(tǒng)高可用的關(guān)鍵。

下面就來(lái)介紹一下,如何實(shí)現(xiàn)在Spring Boot的jar包中對(duì)系統(tǒng)的運(yùn)行情況進(jìn)行監(jiān)控操作。

添加依賴

  首先需要在項(xiàng)目的POM文件中引入如下的依賴

<!-- 獲取系統(tǒng)信息 -->
        <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
            <version>${oshi.version}</version>
        </dependency>
         <oshi.version>5.7.4</oshi.version>

獲取信息

  接下來(lái)就是定義需要獲取的系統(tǒng)信息內(nèi)容有哪些

  • CPU
  • 內(nèi)存
  • JVM
  • 系統(tǒng)
  • 系統(tǒng)文件目錄

CPU

  對(duì)于CPU主要關(guān)注的如下一些參數(shù)

/**
     * 核心數(shù)
     */
    private int cpuNum;
    /**
     * CPU總的使用率
     */
    private double total;
    /**
     * CPU系統(tǒng)使用率
     */
    private double sys;
    /**
     * CPU用戶使用率
     */
    private double used;
    /**
     * CPU當(dāng)前等待率
     */
    private double wait;
    /**
     * CPU當(dāng)前空閑率
     */
    private double free;

JVM

/**
     * 當(dāng)前JVM占用的內(nèi)存總數(shù)(M)
     */
    private double total;
    /**
     * JVM最大可用內(nèi)存總數(shù)(M)
     */
    private double max;
    /**
     * JVM空閑內(nèi)存(M)
     */
    private double free;
    /**
     * JDK版本
     */
    private String version;
    /**
     * JDK路徑
     */
    private String home;

內(nèi)存

/**
     * 內(nèi)存總量
     */
    private double total;
    /**
     * 已用內(nèi)存
     */
    private double used;
    /**
     * 剩余內(nèi)存
     */
    private double free;

系統(tǒng)情況

/**
     * 服務(wù)器名稱
     */
    private String computerName;
    /**
     * 服務(wù)器Ip
     */
    private String computerIp;
    /**
     * 項(xiàng)目路徑
     */
    private String userDir;
    /**
     * 操作系統(tǒng)
     */
    private String osName;
    /**
     * 系統(tǒng)架構(gòu)
     */
    private String osArch;

文件資源

/**
     * 盤符路徑
     */
    private String dirName;
    /**
     * 盤符類型
     */
    private String sysTypeName;
    /**
     * 文件類型
     */
    private String typeName;
    /**
     * 總大小
     */
    private String total;
    /**
     * 剩余大小
     */
    private String free;
    /**
     * 已經(jīng)使用量
     */
    private String used;
    /**
     * 資源的使用率
     */
    private double usage;

  這些都是對(duì)于系統(tǒng)應(yīng)用的基礎(chǔ)性的監(jiān)測(cè),在實(shí)際使用的時(shí)候還需要對(duì)有些信息進(jìn)行深入的挖掘,在使用的過(guò)程中,在對(duì)需求量較小的情況下,這是一種比較可行的方式。但是這些內(nèi)容都是來(lái)自實(shí)例內(nèi)部的回報(bào),并不能解決實(shí)例宕機(jī),或者網(wǎng)絡(luò)中斷等場(chǎng)景中出現(xiàn)的問(wèn)題。所以,只能是用來(lái)監(jiān)控在實(shí)例正常運(yùn)行的狀態(tài)下的一些信息。

是如何獲取到這些信息的

CPU

 /**
     * 設(shè)置CPU信息
     */
    private void setCpuInfo(CentralProcessor processor)
    {
        // CPU信息
        long[] prevTicks = processor.getSystemCpuLoadTicks();
        Util.sleep(OSHI_WAIT_SECOND);
        long[] ticks = processor.getSystemCpuLoadTicks();
        long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
        long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
        long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
        long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
        long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
        long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
        long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
        long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
        long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
        cpu.setCpuNum(processor.getLogicalProcessorCount());
        cpu.setTotal(totalCpu);
        cpu.setSys(cSys);
        cpu.setUsed(user);
        cpu.setWait(iowait);
        cpu.setFree(idle);
    }

內(nèi)存信息

/**
     * 設(shè)置內(nèi)存信息
     */
    private void setMemInfo(GlobalMemory memory)
    {
        mem.setTotal(memory.getTotal());
        mem.setUsed(memory.getTotal() - memory.getAvailable());
        mem.setFree(memory.getAvailable());
    }

服務(wù)器信息

 /**
     * 設(shè)置服務(wù)器信息
     */
    private void setSysInfo()
    {
        Properties props = System.getProperties();
        sys.setComputerName(IpUtils.getHostName());
        sys.setComputerIp(IpUtils.getHostIp());
        sys.setOsName(props.getProperty("os.name"));
        sys.setOsArch(props.getProperty("os.arch"));
        sys.setUserDir(props.getProperty("user.dir"));
    }

JVM信息

/**
     * 設(shè)置Java虛擬機(jī)
     */
    private void setJvmInfo() throws UnknownHostException
    {
        Properties props = System.getProperties();
        jvm.setTotal(Runtime.getRuntime().totalMemory());
        jvm.setMax(Runtime.getRuntime().maxMemory());
        jvm.setFree(Runtime.getRuntime().freeMemory());
        jvm.setVersion(props.getProperty("java.version"));
        jvm.setHome(props.getProperty("java.home"));
    }

磁盤信息

/**
     * 設(shè)置磁盤信息
     */
    private void setSysFiles(OperatingSystem os)
    {
        FileSystem fileSystem = os.getFileSystem();
        List<OSFileStore> fsArray = fileSystem.getFileStores();
        for (OSFileStore fs : fsArray)
        {
            long free = fs.getUsableSpace();
            long total = fs.getTotalSpace();
            long used = total - free;
            SysFile sysFile = new SysFile();
            sysFile.setDirName(fs.getMount());
            sysFile.setSysTypeName(fs.getType());
            sysFile.setTypeName(fs.getName());
            sysFile.setTotal(convertFileSize(total));
            sysFile.setFree(convertFileSize(free));
            sysFile.setUsed(convertFileSize(used));
            sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
            sysFiles.add(sysFile);
        }
    }

  有了這些信息之后,就可以對(duì)實(shí)例的運(yùn)行情況進(jìn)行實(shí)時(shí)的監(jiān)控,當(dāng)實(shí)例出現(xiàn)問(wèn)題的時(shí)候,這些數(shù)據(jù)就不會(huì)出現(xiàn),所以說(shuō),在一般的使用場(chǎng)景下這種方式還是比較有用的。如果可以對(duì)這些信息進(jìn)行采集分析,對(duì)了解系統(tǒng)整體運(yùn)行穩(wěn)定性有一定的幫助。

到此這篇關(guān)于如何監(jiān)控Spring Boot 項(xiàng)目運(yùn)行情況的文章就介紹到這了,更多相關(guān)監(jiān)控Spring Boot 項(xiàng)目運(yùn)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式

    Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式

    這篇文章主要介紹了Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • java版十大排序經(jīng)典算法:完整代碼

    java版十大排序經(jīng)典算法:完整代碼

    優(yōu)秀的文章也不少,但是Java完整版的好像不多,我把所有的寫一遍鞏固下,同時(shí)也真誠(chéng)的希望閱讀到這篇文章的小伙伴們可以自己去從頭敲一遍,不要粘貼復(fù)制!希望我的文章對(duì)你有所幫助,每天進(jìn)步一點(diǎn)點(diǎn)
    2021-07-07
  • 16個(gè)SpringBoot擴(kuò)展接口的總結(jié)和實(shí)例

    16個(gè)SpringBoot擴(kuò)展接口的總結(jié)和實(shí)例

    Spring Boot是一個(gè)開源的Java框架,它簡(jiǎn)化了基于Spring的應(yīng)用程序的開發(fā)和部署,它提供了許多強(qiáng)大的特性和擴(kuò)展接口,本文給大家介紹了16個(gè)常用的Spring Boot擴(kuò)展接口,需要的朋友可以參考下
    2023-09-09
  • Java class文件格式之常量池_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java class文件格式之常量池_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java class文件格式之常量池的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Eclipse快速添加get、set方法的操作技巧

    Eclipse快速添加get、set方法的操作技巧

    這篇文章主要介紹了Eclipse快速添加get、set方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例

    JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例

    這篇文章主要介紹了JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法

    java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單鏈表倒轉(zhuǎn)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java Swing JComboBox下拉列表框的示例代碼

    Java Swing JComboBox下拉列表框的示例代碼

    這篇文章主要介紹了Java Swing JComboBox下拉列表框的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot 如何實(shí)現(xiàn)異步編程

    SpringBoot 如何實(shí)現(xiàn)異步編程

    在SpringBoot的日常開發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來(lái)處理,本文就詳細(xì)的介紹一下SpringBoot 如何實(shí)現(xiàn)異步編程 ,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • MyBatis一對(duì)一級(jí)聯(lián)更新問(wèn)題小結(jié)

    MyBatis一對(duì)一級(jí)聯(lián)更新問(wèn)題小結(jié)

    日常工作中經(jīng)常會(huì)涉及到一對(duì)一級(jí)聯(lián)更新的問(wèn)題,本文主要介紹了MyBatis一對(duì)一級(jí)聯(lián)更新問(wèn)題小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論