java用oshi实现监控电脑信息,cpu,内存,进程,硬盘,上传下载等信息.
2020-08-03 17:26
495 查看
使用的是从github直接clone的oshi类
监控电脑的进程,cpu使用率温度,内存的使用率,还有网络的上传下载,听到这个需求的时候我想到的是为什么不下载一个鲁大师😄.
当时说需要jmx,但是搜一搜发现使用oshi很方便,
public class demo { public static void main(String[] args) { // Options: ERROR > WARN > INFO > DEBUG > TRACE Logger LOG = LoggerFactory.getLogger(demo.class); LOG.info("Initializing System..."); SystemInfo si = new SystemInfo(); HardwareAbstractionLayer hal = si.getHardware(); OperatingSystem os = si.getOperatingSystem(); System.out.println(os); LOG.info("Checking computer system..."); printComputerSystem(hal.getComputerSystem()); LOG.info("Checking Processor..."); printProcessor(hal.getProcessor()); LOG.info("Checking Memory..."); printMemory(hal.getMemory()); LOG.info("Checking CPU..."); printCpu(hal.getProcessor()); LOG.info("Checking Processes..."); printProcesses(os, hal.getMemory()); LOG.info("Checking Sensors..."); printSensors(hal.getSensors()); LOG.info("Checking Power sources..."); printPowerSources(hal.getPowerSources()); LOG.info("Checking Disks..."); printDisks(hal.getDiskStores()); LOG.info("Checking File System..."); printFileSystem(os.getFileSystem()); LOG.info("Checking Network interfaces..."); printNetworkInterfaces(hal.getNetworkIFs()); LOG.info("Checking Network parameterss..."); printNetworkParameters(os.getNetworkParams()); // hardware: displays LOG.info("Checking Displays..."); printDisplays(hal.getDisplays()); // hardware: USB devices LOG.info("Checking USB Devices..."); printUsbDevices(hal.getUsbDevices(true)); } private static void printComputerSystem(final ComputerSystem computerSystem) { System.out.println("manufacturer: " + computerSystem.getManufacturer()); System.out.println("model: " + computerSystem.getModel()); System.out.println("serialnumber: " + computerSystem.getSerialNumber()); final Firmware firmware = computerSystem.getFirmware(); System.out.println("firmware:"); System.out.println(" manufacturer: " + firmware.getManufacturer()); System.out.println(" name: " + firmware.getName()); System.out.println(" description: " + firmware.getDescription()); System.out.println(" version: " + firmware.getVersion()); System.out.println(" release date: " + (firmware.getReleaseDate() == null ? "unknown" : firmware.getReleaseDate() == null ? "unknown" : FormatUtil.formatDate(firmware.getReleaseDate()))); final Baseboard baseboard = computerSystem.getBaseboard(); System.out.println("baseboard:"); System.out.println(" manufacturer: " + baseboard.getManufacturer()); System.out.println(" model: " + baseboard.getModel()); System.out.println(" version: " + baseboard.getVersion()); System.out.println(" serialnumber: " + baseboard.getSerialNumber()); } private static void printProcessor(CentralProcessor processor) { System.out.println(processor); System.out.println(" " + processor.getPhysicalProcessorCount() + " physical CPU package(s)"); System.out.println(" " + processor.getPhysicalProcessorCount() + " physical CPU core(s)"); System.out.println(" " + processor.getLogicalProcessorCount() + " logical CPU(s)"); System.out.println("Identifier: " + processor.getIdentifier()); System.out.println("ProcessorID: " + processor.getProcessorID()); } private static void printMemory(GlobalMemory memory) { System.out.println("Memory: " + FormatUtil.formatBytes(memory.getAvailable()) + "/" + FormatUtil.formatBytes(memory.getTotal())); System.out.println("Swap used: " + FormatUtil.formatBytes(memory.getSwapUsed()) + "/" + FormatUtil.formatBytes(memory.getSwapTotal())); } private static void printCpu(CentralProcessor processor) { System.out.println("Uptime: " + FormatUtil.formatElapsedSecs(processor.getSystemUptime())); long[] prevTicks = processor.getSystemCpuLoadTicks(); System.out.println("CPU, IOWait, and IRQ ticks @ 0 sec:" + Arrays.toString(prevTicks)); // Wait a second... Util.sleep(1000); long[] ticks = processor.getSystemCpuLoadTicks(); System.out.println("CPU, IOWait, and IRQ ticks @ 1 sec:" + Arrays.toString(ticks)); long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; long sys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; long totalCpu = user + nice + sys + idle + iowait + irq + softirq + steal; System.out.format( "User: %.1f%% Nice: %.1f%% System: %.1f%% Idle: %.1f%% IOwait: %.1f%% IRQ: %.1f%% SoftIRQ: %.1f%% Steal: %.1f%%%n", 100d * user / totalCpu, 100d * nice / totalCpu, 100d * sys / totalCpu, 100d * idle / totalCpu, 100d * iowait / totalCpu, 100d * irq / totalCpu, 100d * softirq / totalCpu, 100d * steal / totalCpu); System.out.format("CPU load: %.1f%% (counting ticks)%n", processor.getSystemCpuLoadBetweenTicks() * 100); System.out.format("CPU load: %.1f%% (OS MXBean)%n", processor.getSystemCpuLoad() * 100); double[] loadAverage = processor.getSystemLoadAverage(3); System.out.println("CPU load averages:" + (loadAverage[0] < 0 ? " N/A" : String.format(" %.2f", loadAverage[0])) + (loadAverage[1] < 0 ? " N/A" : String.format(" %.2f", loadAverage[1])) + (loadAverage[2] < 0 ? " N/A" : String.format(" %.2f", loadAverage[2]))); // per core CPU StringBuilder procCpu = new StringBuilder("CPU load per processor:"); double[] load = processor.getProcessorCpuLoadBetweenTicks(); for (double avg : load) { procCpu.append(String.format(" %.1f%%", avg * 100)); } System.out.println(procCpu.toString()); } private static void printProcesses(OperatingSystem os, GlobalMemory memory) { System.out.println("Processes: " + os.getProcessCount() + ", Threads: " + os.getThreadCount()); // Sort by highest CPU List<OSProcess> procs = Arrays.asList(os.getProcesses(5, ProcessSort.CPU)); System.out.println(" PID %CPU %MEM VSZ RSS Name"); for (int i = 0; i < procs.size() && i < 5; i++) { OSProcess p = procs.get(i); System.out.format(" %5d %5.1f %4.1f %9s %9s %s%n", p.getProcessID(), 100d * (p.getKernelTime() + p.getUserTime()) / p.getUpTime(), 100d * p.getResidentSetSize() / memory.getTotal(), FormatUtil.formatBytes(p.getVirtualSize()), FormatUtil.formatBytes(p.getResidentSetSize()), p.getName()); } } private static void printSensors(Sensors sensors) { System.out.println("Sensors:"); System.out.format(" CPU Temperature: %.1f°C%n", sensors.getCpuTemperature()); System.out.println(" Fan Speeds: " + Arrays.toString(sensors.getFanSpeeds())); System.out.format(" CPU Voltage: %.1fV%n", sensors.getCpuVoltage()); } private static void printPowerSources(PowerSource[] powerSources) { StringBuilder sb = new StringBuilder("Power: "); if (powerSources.length == 0) { sb.append("Unknown"); } else { double timeRemaining = powerSources[0].getTimeRemaining(); if (timeRemaining < -1d) { sb.append("Charging"); } else if (timeRemaining < 0d) { sb.append("Calculating time remaining"); } else { sb.append(String.format("%d:%02d remaining", (int) (timeRemaining / 3600), (int) (timeRemaining / 60) % 60)); } } for (PowerSource pSource : powerSources) { sb.append(String.format("%n %s @ %.1f%%", pSource.getName(), pSource.getRemainingCapacity() * 100d)); } System.out.println(sb.toString()); } private static void printDisks(HWDiskStore[] diskStores) { System.out.println("Disks:"); for (HWDiskStore disk : diskStores) { boolean readwrite = disk.getReads() > 0 || disk.getWrites() > 0; System.out.format(" %s: (model: %s - S/N: %s) size: %s, reads: %s (%s), writes: %s (%s), xfer: %s ms%n", disk.getName(), disk.getModel(), disk.getSerial(), disk.getSize() > 0 ? FormatUtil.formatBytesDecimal(disk.getSize()) : "?", readwrite ? disk.getReads() : "?", readwrite ? FormatUtil.formatBytes(disk.getReadBytes()) : "?", readwrite ? disk.getWrites() : "?", readwrite ? FormatUtil.formatBytes(disk.getWriteBytes()) : "?", readwrite ? disk.getTransferTime() : "?"); HWPartition[] partitions = disk.getPartitions(); if (partitions == null) { // TODO Remove when all OS's implemented continue; } for (HWPartition part : partitions) { System.out.format(" |-- %s: %s (%s) Maj:Min=%d:%d, size: %s%s%n", part.getIdentification(), part.getName(), part.getType(), part.getMajor(), part.getMinor(), FormatUtil.formatBytesDecimal(part.getSize()), part.getMountPoint().isEmpty() ? "" : " @ " + part.getMountPoint()); } } } private static void printFileSystem(FileSystem fileSystem) { System.out.println("File System:"); System.out.format(" File Descriptors: %d/%d%n", fileSystem.getOpenFileDescriptors(), fileSystem.getMaxFileDescriptors()); OSFileStore[] fsArray = fileSystem.getFileStores(); for (OSFileStore fs : fsArray) { long usable = fs.getUsableSpace(); long total = fs.getTotalSpace(); System.out.format( " %s (%s) [%s] %s of %s free (%.1f%%) is %s " + (fs.getLogicalVolume() != null && fs.getLogicalVolume().length() > 0 ? "[%s]" : "%s") + " and is mounted at %s%n", fs.getName(), fs.getDescription().isEmpty() ? "file system" : fs.getDescription(), fs.getType(), FormatUtil.formatBytes(usable), FormatUtil.formatBytes(fs.getTotalSpace()), 100d * usable / total, fs.getVolume(), fs.getLogicalVolume(), fs.getMount()); } } private static void printNetworkInterfaces(NetworkIF[] networkIFs) { System.out.println("Network interfaces:"); for (NetworkIF net : networkIFs) { System.out.format(" Name: %s (%s)%n", net.getName(), net.getDisplayName()); System.out.format(" MAC Address: %s %n", net.getMacaddr()); System.out.format(" MTU: %s, Speed: %s %n", net.getMTU(), FormatUtil.formatValue(net.getSpeed(), "bps")); System.out.format(" IPv4: %s %n", Arrays.toString(net.getIPv4addr())); System.out.format(" IPv6: %s %n", Arrays.toString(net.getIPv6addr())); boolean hasData = net.getBytesRecv() > 0 || net.getBytesSent() > 0 || net.getPacketsRecv() > 0 || net.getPacketsSent() > 0; System.out.format(" Traffic: received %s/%s%s; transmitted %s/%s%s %n", hasData ? net.getPacketsRecv() + " packets" : "?", hasData ? FormatUtil.formatBytes(net.getBytesRecv()) : "?", hasData ? " (" + net.getInErrors() + " err)" : "", hasData ? net.getPacketsSent() + " packets" : "?", hasData ? FormatUtil.formatBytes(net.getBytesSent()) : "?", hasData ? " (" + net.getOutErrors() + " err)" : ""); } } private static void printNetworkParameters(NetworkParams networkParams) { System.out.println("Network parameters:"); System.out.format(" Host name: %s%n", networkParams.getHostName()); System.out.format(" Domain name: %s%n", networkParams.getDomainName()); System.out.format(" DNS servers: %s%n", Arrays.toString(networkParams.getDnsServers())); System.out.format(" IPv4 Gateway: %s%n", networkParams.getIpv4DefaultGateway()); System.out.format(" IPv6 Gateway: %s%n", networkParams.getIpv6DefaultGateway()); } private static void printDisplays(Display[] displays) { System.out.println("Displays:"); int i = 0; for (Display display : displays) { System.out.println(" Display " + i + ":"); System.out.println(display.toString()); i++; } } private static void printUsbDevices(UsbDevice[] usbDevices) { System.out.println("USB Devices:"); for (UsbDevice usbDevice : usbDevices) { System.out.println(usbDevice.toString()); } } }
可以直接从GitHub上clone下来,放入项目中直接就可以使用,大多数是英文不太好看懂,不过仔细看看也可以看懂 , 下面忘记是在哪个大神的博客看到的代码直接复制来用了.算是实现了需求
//获取cpu信息 public static String 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核数:" + processor.getLogicalProcessorCount()); //System.out.println("cpu系统使用率:" + new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu)); //System.out.println("cpu用户使用率:" + new DecimalFormat("#.##%").format(user * 1.0 / totalCpu)); //System.out.println("cpu当前等待率:" + new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu)); //System.out.println("cpu当前使用率:" + new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu))); return new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)); } //获取内存使用率 public static String MemInfo(){ System.out.println("----------------主机内存信息----------------"); SystemInfo systemInfo = new SystemInfo(); GlobalMemory memory = systemInfo.getHardware().getMemory(); //总内存 long totalByte = memory.getTotal(); //剩余 long acaliableByte = memory.getAvailable(); //System.out.println("总内存 = " + formatByte(totalByte)); //System.out.println("使用" + formatByte(totalByte-acaliableByte)); //System.out.println("剩余内存 = " + formatByte(acaliableByte)); //System.out.println("使用率:" + new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte)); return new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte); } //二进制转换 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); } //获取网络上传和下载 public static Map<String,String> printNetworkInterfaces() { System.out.println("Network interfaces:"); SystemInfo si = new SystemInfo(); HardwareAbstractionLayer hal = si.getHardware(); NetworkIF[] networkIFs = hal.getNetworkIFs(); int i=networkIFs.length-1; NetworkIF net=networkIFs[i]; String in = FormatUtil.formatBytes(net.getBytesRecv()); String out = FormatUtil.formatBytes(net.getBytesSent()); HashMap<String, String> map = new HashMap<>(); map.put("in",in); map.put("out",out); return map; } //获取进程数 public static int getProcessesCount(){ SystemInfo si = new SystemInfo(); OperatingSystem os = si.getOperatingSystem(); int processCount = os.getProcessCount(); return processCount; }
还有很多其他功能,获取jvm信息,硬盘信息等可以自己去看.
相关文章推荐
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法 .
- java利用sigar获取电脑cpu 内存 硬盘使用率等信息
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java实现获取cpu、内存、硬盘、网络等信息的方法示例
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- java获取系统信息(CPU,内存,硬盘,进程)的相关方法
- java获取cpu、内存、硬盘信息
- Java如何获取系统信息(包括操作系统、jvm、cpu、内存、硬盘、网络、io等)
- Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息
- Java学习篇之---java获取cpu、内存、硬盘信息
- java获取cpu、内存、硬盘信息[转]
- C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息
- java获取cpu、内存、硬盘信息