oshi方法获取cpu、内存和系统当前时间瞬时信息!
pom.xml
<!-- oshi方法获取cpu -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>3.5.0</version>
</dependency>
核心代码:
package com.sunwave.domain;
import java.text.DecimalFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
@SuppressWarnings("restriction")
@Slf4j
public class test {
//日志打印
private final static Logger logger = LoggerFactory.getLogger(test.class);
//oshi方法获取cpu信息
public static void main(String[] args) throws Exception {
//1、获取cpu信息
while(true) {
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;
logger.info("CPU总数 = {},CPU利用率 ={}",processor.getLogicalProcessorCount(),new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)));
Thread.sleep(2000);
System.out.println("系统开始时间:"+System.currentTimeMillis());
System.out.println("cpu利用率:"+(1.0-(idle * 1.0 / totalCpu)));
//2、获取当前系统时间
long startTime = System.currentTimeMillis();//初始时间
//获取当前的系统时间,与初始时间相减就是程序运行的毫秒数,除以1000就是秒数
long endTime = System.currentTimeMillis();
long usedTime = (endTime-startTime)/1000;
//3、获取内存信息
GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalByte = memory.getTotal();
long acaliableByte = memory.getAvailable();
logger.info("可用内存大小 = {},内存使用率 ={}",formatByte(totalByte),new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte));
Thread.sleep(1000);
}
}
//3、获取内存信息调用
public static String formatByte(long bNumber){
double formatB = 1024.0;
double kNumber = bNumber/formatB;
if(kNumber<formatB){
return new DecimalFormat("#.##KB").format(kNumber);
}
double mbNumber = kNumber/formatB;
if(mbNumber<formatB){
return new DecimalFormat("#.##MB").format(mbNumber);
}
double gbNumber = mbNumber/formatB;
if(gbNumber<formatB){
return new DecimalFormat("#.##GB").format(gbNumber);
}
double tbNumber = gbNumber/formatB;
return new DecimalFormat("#.##TB").format(tbNumber);
}
}
大功告成!
亲测有效!