java使用oshi获取硬件信息,包括cpu温度
SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
CentralProcessor processor = hal.getProcessor();
long[] prevTicks = processor.getSystemCpuLoadTicks();
Util.sleep(1000);
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;
map.put("cpuName", processor.getName());
map.put("block",processor.getLogicalProcessorCount());
map.put("cpuUsedLV",new DecimalFormat("#.##").format(1.0-(idle * 1.0 / totalCpu)));
Properties props = System.getProperties();
map.put("vendorName",props.getProperty("os.name"));
Map drive = new HashMap();
ArrayList<Map> arrayList = new ArrayList<>();
oshi.software.os.OperatingSystem op = si.getOperatingSystem();
FileSystem fileSystem = op.getFileSystem();
OSFileStore[] fsArray = fileSystem.getFileStores();
for (OSFileStore fs : fsArray) {
drive = new HashMap();
long free = fs.getUsableSpace();
long total = fs.getTotalSpace();
long used = total - free;
drive.put("name",fs.getName());
drive.put("driveUses",((int)(((total*1.0)/1024/1024/1024))));
drive.put("driveUsed",((int)(((used*1.0)/1024/1024/1024))));
drive.put("driveUsedLv",(int)((used*1.0 / total*1.0)*100) );
arrayList.add(drive);
}
map.put("driver",arrayList);
SystemInfo systemInfo = new SystemInfo();
GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalByte = memory.getTotal();
long acaliableByte = memory.getAvailable();
map.put("memoryAllSize",((int)((memory.getTotal()*1.0)/1024/1024/1024))+"G");
map.put("memoryUsed", ((int)((memory.getTotal() - memory.getAvailable()*1.0)/1024/1024/1024))+"G");
map.put("memoryUsedLv", new DecimalFormat("#.##").format((totalByte-acaliableByte)*1.0/totalByte));
InetAddress address = InetAddress.getLocalHost();
map.put("ip",address.getHostAddress());
Sensors sensors = hal.getSensors();
double cpuTemperature = sensors.getCpuTemperature();
map.put("cpuTemperature",cpuTemperature);