CTimet 2022-06-18 15:26 采纳率: 84%
浏览 163
已结题

通过Oshi获取到的CPU占用为NaN

问题遇到的现象和发生背景

我在写一个程序,程序需要能够获得CPU占用。但是我又不会写,于是我就从C上抄了一份能够得到CPU占用的代码

问题相关代码,请勿粘贴截图
SystemInfo systemInfo = new SystemInfo();
                CentralProcessor processor = systemInfo.getHardware().getProcessor();
                long[] prevTicks = processor.getSystemCpuLoadTicks();
                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;
                GlobalMemory memory = systemInfo.getHardware().getMemory();
                long totalByte = memory.getTotal();
                long acaliableByte = memory.getAvailable();
                result.append("当前机器CPU核心数量:").append(processor.getLogicalProcessorCount());
                result.append("\n");
                result.append("当前机器CPU总占用:").append(new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu))).append("%");

img

运行结果及报错内容

不报错,但是有一个问题。第一次得到的CPU占比是好的,但是第二次的时候,idle和totalCpu就变成0了,0/0结果引发了NaN,以下是debug截图:

img


可以看到很多参数都是0

我的解答思路和尝试过的方法

我对Oshi也不太了解(毕竟代码都是抄的),而且第一遍运行都是好的第二遍就成了0这种疑难杂症本来就难治。没办法了来发个问题

我想要达到的结果

让他别为0,正常显示

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月26日
    • 创建了问题 6月18日

    悬赏问题

    • ¥15 关于#java#的问题,请各位专家解答!
    • ¥15 急matlab编程仿真二阶震荡系统
    • ¥20 TEC-9的数据通路实验
    • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
    • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
    • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
    • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
    • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
    • ¥30 求解达问题(有红包)
    • ¥15 请解包一个pak文件