我一直在研究为特定过程实现以下数据的最佳方法:
我决定使用 OSHI(操作系统和硬件信息)API。对我来说不幸的是,这个 API 没有给我开箱即用的信息,它需要一些关于如何计算的基本知识,例如每个进程的 CPU 使用率。
我的问题是:如何通过进程 id 获取内存、磁盘、网络使用情况?
使用以下每个进程的 CPU 使用数据示例
例如:
要获取 claculator.exe 运行进程的实际 CPU 使用率:
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.software.os.OSProcess;
import oshi.software.os.OperatingSystem;
public class processCPUusage {
public static void main(String[] args) throws InterruptedException {
OSProcess process;
long currentTime,previousTime = 0,timeDifference;
double cpu;
int pid = 7132;
SystemInfo si = new SystemInfo();
OperatingSystem os = si.getOperatingSystem();
CentralProcessor processor = si.getHardware().getProcessor();
int cpuNumber = processor.getLogicalProcessorCount();
boolean processExists = true;
while (processExists) {
process …Run Code Online (Sandbox Code Playgroud) 我无法在 Windows PE 上运行我的 Java 应用程序。基本上,我的应用程序获取硬件数据和操作系统信息。为此,我使用了 Oshi Java 库,但 Oshi 使用了不断崩溃的 JNA 库。
注意:我的应用程序在任何其他操作系统上运行良好,但无法在 Windows PE 上运行。我正在使用的代码如下:
HardwareAbstractionLayer hal = si.getHardware();
OperatingSystem os = si.getOperatingSystem();
hal.getComputerSystem();
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
我想获取CPU使用率来使用java连续更新我的数据库。在第一个循环中,此代码可读取正确的 CPU 使用情况。之后,它返回小于 0 的错误值。所以,我卡住了。
我用的是jdk 1.8.124。
请让我知道如何连续获取CPU使用率。
库
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;
Run Code Online (Sandbox Code Playgroud)
源代码
public static void main(String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
while (true) {
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
try {
Thread.sleep(3000);
}
catch (Exception e){
System.out.println(e.toString());
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)