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

java?oshi如何查看cpu信息

 更新時(shí)間:2022年01月25日 10:36:30   作者:占星安啦  
這篇文章主要介紹了java?oshi如何查看cpu信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

oshi查看cpu信息

OSHI可以跨平臺(tái)查看服務(wù)器信息,其中cpu負(fù)載信息為當(dāng)前占用CPU的時(shí)間。需要在一段時(shí)間內(nèi)獲取兩次,然后相減得出這段時(shí)間內(nèi)所占用的時(shí)間。這段時(shí)間除以總占用時(shí)間就是占用百分比。

pom引入依賴

<dependency>
? ? ? <groupId>com.github.oshi</groupId>
? ? ? <artifactId>oshi-core</artifactId>
? ? ? <version>3.12.2</version>
</dependency>

測(cè)試類

package io.greatcolin.jvmMessage;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import java.text.DecimalFormat;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

/**
 * @author colin.cheng
 * @version V1.0
 * @date Created In 16:04 2019/8/16
 */
public class OshiTest {
    public static void main(String[] args) {
        while (true){
            try {
                OshiTest.printlnCpuInfo();
                OshiTest.MemInfo();
                OshiTest.getThread();
                OshiTest.setSysInfo();
                OshiTest.setJvmInfo();
                TimeUnit.SECONDS.sleep(5);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    private static void printlnCpuInfo() throws InterruptedException {
        //System.out.println("----------------cpu信息----------------");
        SystemInfo systemInfo = new SystemInfo();
        CentralProcessor processor = systemInfo.getHardware().getProcessor();
        long[] prevTicks = processor.getSystemCpuLoadTicks();
        // 睡眠1s
        TimeUnit.SECONDS.sleep(1);
        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;
        System.out.println("----------------cpu信息----------------");
        System.out.println("cpu核數(shù):" + processor.getLogicalProcessorCount());
        System.out.println("cpu系統(tǒng)使用率:" + new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));
        System.out.println("cpu用戶使用率:" + new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));
        System.out.println("cpu當(dāng)前等待率:" + new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));
        System.out.println("cpu當(dāng)前使用率:" + new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)));
    }

    public static void MemInfo(){
        System.out.println("----------------主機(jī)內(nèi)存信息----------------");
        SystemInfo systemInfo = new SystemInfo();
        GlobalMemory memory = systemInfo.getHardware().getMemory();
        //總內(nèi)存
        long totalByte = memory.getTotal();
        //剩余
        long acaliableByte = memory.getAvailable();
        System.out.println("總內(nèi)存 = " + formatByte(totalByte));
        System.out.println("使用" + formatByte(totalByte-acaliableByte));
        System.out.println("剩余內(nèi)存 = " + formatByte(acaliableByte));
        System.out.println("使用率:" + new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte));
    }

    public static void setSysInfo(){
        System.out.println("----------------操作系統(tǒng)信息----------------");
        Properties props = System.getProperties();
        //系統(tǒng)名稱
        String osName = props.getProperty("os.name");
        //架構(gòu)名稱
        String osArch = props.getProperty("os.arch");
        System.out.println("操作系統(tǒng)名 = " + osName);
        System.out.println("系統(tǒng)架構(gòu) = " + osArch);
    }

    public static void setJvmInfo(){
        System.out.println("----------------jvm信息----------------");
        Properties props = System.getProperties();
        Runtime runtime = Runtime.getRuntime();
        //jvm總內(nèi)存
        long jvmTotalMemoryByte = runtime.totalMemory();
        //jvm最大可申請(qǐng)
        long jvmMaxMoryByte = runtime.maxMemory();
        //空閑空間
        long freeMemoryByte = runtime.freeMemory();
        //jdk版本
        String jdkVersion = props.getProperty("java.version");
        //jdk路徑
        String jdkHome = props.getProperty("java.home");
        System.out.println("jvm內(nèi)存總量 = " + formatByte(jvmTotalMemoryByte));
        System.out.println("jvm已使用內(nèi)存 = " + formatByte(jvmTotalMemoryByte-freeMemoryByte));
        System.out.println("jvm剩余內(nèi)存 = " + formatByte(freeMemoryByte));
        System.out.println("jvm內(nèi)存使用率 = " + new DecimalFormat("#.##%").format((jvmTotalMemoryByte-freeMemoryByte)*1.0/jvmTotalMemoryByte));
        System.out.println("java版本 = " + jdkVersion);
        //System.out.println("jdkHome = " + jdkHome);
    }

    public static void getThread(){
        System.out.println("----------------線程信息----------------");
        ThreadGroup currentGroup =Thread.currentThread().getThreadGroup();

        while (currentGroup.getParent()!=null){
          // 返回此線程組的父線程組
          currentGroup=currentGroup.getParent();
        }
        //此線程組中活動(dòng)線程的估計(jì)數(shù)
        int noThreads = currentGroup.activeCount();

        Thread[] lstThreads = new Thread[noThreads];
        //把對(duì)此線程組中的所有活動(dòng)子組的引用復(fù)制到指定數(shù)組中。
        currentGroup.enumerate(lstThreads);
        for (Thread thread : lstThreads) {
          System.out.println("線程數(shù)量:"+noThreads+" 線程id:" + thread.getId() + " 線程名稱:" + thread.getName() + " 線程狀態(tài):" + thread.getState());
        }
    }

    public static String formatByte(long byteNumber){
        //換算單位
        double FORMAT = 1024.0;
        double kbNumber = byteNumber/FORMAT;
        if(kbNumber<FORMAT){
            return new DecimalFormat("#.##KB").format(kbNumber);
        }
        double mbNumber = kbNumber/FORMAT;
        if(mbNumber<FORMAT){
            return new DecimalFormat("#.##MB").format(mbNumber);
        }
        double gbNumber = mbNumber/FORMAT;
        if(gbNumber<FORMAT){
            return new DecimalFormat("#.##GB").format(gbNumber);
        }
        double tbNumber = gbNumber/FORMAT;
        return new DecimalFormat("#.##TB").format(tbNumber);
    }
}

輸出結(jié)果

# 沒添加slf4j的依賴,不影響
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
----------------cpu信息----------------
cpu核數(shù):4
cpu系統(tǒng)使用率:1.88%
cpu用戶使用率:2.73%
cpu當(dāng)前等待率:0%
cpu當(dāng)前使用率:4.71%
----------------主機(jī)內(nèi)存信息----------------
總內(nèi)存 = 7.88GB
使用5.89GB
剩余內(nèi)存 = 1.99GB
使用率:74.72%
----------------線程信息----------------
線程數(shù)量:5 線程id:2 線程名稱:Reference Handler 線程狀態(tài):WAITING
線程數(shù)量:5 線程id:3 線程名稱:Finalizer 線程狀態(tài):WAITING
線程數(shù)量:5 線程id:4 線程名稱:Signal Dispatcher 線程狀態(tài):RUNNABLE
線程數(shù)量:5 線程id:5 線程名稱:Attach Listener 線程狀態(tài):RUNNABLE
線程數(shù)量:5 線程id:1 線程名稱:main 線程狀態(tài):RUNNABLE
----------------操作系統(tǒng)信息----------------
操作系統(tǒng)名 = Windows 7
系統(tǒng)架構(gòu) = amd64
----------------jvm信息----------------
jvm內(nèi)存總量 = 123MB
jvm已使用內(nèi)存 = 20.46MB
jvm剩余內(nèi)存 = 102.54MB
jvm內(nèi)存使用率 = 16.64%
java版本 = 1.8.0_65

oshi獲取cpu/內(nèi)存使用率前十的進(jìn)程

CPU

@Override
public void getFirstCpuUsed() {
? ? OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();
? ? List<OSProcess> processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.CPU);
? ? for (OSProcess process : processList) {
? ? ? ? //進(jìn)程名,進(jìn)程ID,進(jìn)程CPU使用率
? ? ? ? System.out.println(String.format("name:%s PID: %d CPU:%.3f",
? ? ? ? ? ? ? ? process.getName(),process.getProcessID(),
? ? ? ? ? ? ? ? process.getProcessCpuLoadCumulative()));
? ? }
}

內(nèi)存

public void getFirstMemUsed(){
? ? OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();
? ? List<OSProcess> processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.MEMORY);
? ? for (OSProcess process : processList) {
? ? ? ? //進(jìn)程名,京城ID,進(jìn)程CPU使用率
? ? ? ? System.out.println(String.format("name:%s PID: %d CPU:%.3f",
? ? ? ? ? ? ? ? process.getName(),process.getProcessID(),
? ? ? ? ? ? ? ? process.getProcessCpuLoadCumulative()));
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java大文件上傳詳解及實(shí)例代碼

    Java大文件上傳詳解及實(shí)例代碼

    這篇文章主要介紹了Java大文件上傳詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能

    java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 刪除JAVA集合中元素的實(shí)現(xiàn)代碼

    刪除JAVA集合中元素的實(shí)現(xiàn)代碼

    有時(shí)候我們要?jiǎng)h除集合中的某些元素,那么就可以參考下面的代碼
    2013-07-07
  • 自制Java工具實(shí)現(xiàn)翻譯鼠標(biāo)選中文本

    自制Java工具實(shí)現(xiàn)翻譯鼠標(biāo)選中文本

    這篇文章主要為大家詳細(xì)介紹了如何自制Java工具實(shí)現(xiàn)ctrl+c+c翻譯鼠標(biāo)選中文本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01
  • 使用SpringBoot自定義starter的完整步驟

    使用SpringBoot自定義starter的完整步驟

    這篇文章主要給大家介紹了關(guān)于使用SpringBoot自定義starter的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • nohup運(yùn)行Java tail查看日志方式

    nohup運(yùn)行Java tail查看日志方式

    nohup命令允許程序在用戶退出賬戶或關(guān)閉終端后繼續(xù)運(yùn)行,常與"&"結(jié)合使用以實(shí)現(xiàn)程序的后臺(tái)執(zhí)行,配合重定向操作,nohup可以將程序輸出保存到日志文件中,如nohup java -jar XXX.jar &> myout.log &,此外,tail命令可用于實(shí)時(shí)監(jiān)控日志文件的變化
    2024-09-09
  • Spring Boot使用Druid連接池的示例代碼

    Spring Boot使用Druid連接池的示例代碼

    Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池。這篇文章主要介紹了Spring Boot使用Druid連接池的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java8 CompletableFuture詳解

    Java8 CompletableFuture詳解

    這篇文章主要介紹了Java8 CompletableFuture詳解,CompletableFuture extends Future提供了方法,一元操作符和促進(jìn)異步性以及事件驅(qū)動(dòng)編程模型,需要的朋友可以參考下
    2014-06-06
  • SpringBoot攔截器實(shí)現(xiàn)登錄攔截的方法示例

    SpringBoot攔截器實(shí)現(xiàn)登錄攔截的方法示例

    這篇文章主要介紹了SpringBoot攔截器實(shí)現(xiàn)登錄攔截的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • swing jtextArea滾動(dòng)條和文字縮放效果

    swing jtextArea滾動(dòng)條和文字縮放效果

    這篇文章主要為大家詳細(xì)介紹了swing jtextArea滾動(dòng)條和文字縮放效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論

德保县| 安丘市| 驻马店市| 富宁县| 贵港市| 昆山市| 玛多县| 长葛市| 师宗县| 伊金霍洛旗| 洛川县| 郯城县| 德庆县| 托里县| 南丰县| 澄江县| 平南县| 眉山市| 凤庆县| 宁乡县| 邓州市| 瑞安市| 高密市| 井冈山市| 红安县| 舒兰市| 桑日县| 西贡区| 深水埗区| 昭通市| 高唐县| 庆阳市| 广水市| 布尔津县| 顺昌县| 兴海县| 德安县| 东乡| 宿迁市| 县级市| 衢州市|