获取Java应用程序的CPU和内存使用情况的Java API

获取Java应用程序的CPU和内存使用情况的Java API,java,cpu-usage,heap-memory,Java,Cpu Usage,Heap Memory,我需要一个API来获取当前进程或java应用程序的CPU和内存使用情况 我有一个API来获取整个系统的CPU使用率,但我需要它用于特定进程(OperatingSystemMXBeaninterface的getSystemCpuLoad) 提前谢谢有好消息也有坏消息。坏消息是,使用纯Java无法以编程方式查询CPU使用情况。这方面根本没有API。建议的替代方法可能是使用Runtime.exec()确定JVM的进程ID(PID),调用外部的、特定于平台的命令(如ps),并为感兴趣的PID解析其输出。

我需要一个API来获取当前进程或java应用程序的CPU和内存使用情况

我有一个API来获取整个系统的CPU使用率,但我需要它用于特定进程(
OperatingSystemMXBean
interface的
getSystemCpuLoad


提前谢谢

有好消息也有坏消息。坏消息是,使用纯Java无法以编程方式查询CPU使用情况。这方面根本没有API。建议的替代方法可能是使用Runtime.exec()确定JVM的进程ID(PID),调用外部的、特定于平台的命令(如ps),并为感兴趣的PID解析其输出。但是,这种方法充其量也是脆弱的


然而,好消息是,一个可靠的解决方案可以通过跳出Java并编写一些C代码行来实现,这些代码行通过Java本机接口(JavaNativeInterface,JNI)与Java应用程序集成

如果使用不同的
操作系统,则可以获取该数据

检查导入的包:com.sun.management.OperatingSystemMXBean

 import java.lang.management.ManagementFactory;
 import com.sun.management.OperatingSystemMXBean;

 public class Test {

 public static void main(String[] args) {
       OperatingSystemMXBean operatingSystemMXBean = 
          (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
       System.out.println(operatingSystemMXBean.getProcessCpuLoad());
 }}


如果我没有弄错的话,这个类包含在java运行时中的rt.jar中。

一旦有了pid,就可以使用jstat-gc[insert pid here]来查找垃圾收集堆行为的统计信息

jstat-gccapacity[在此处插入pid]将显示有关内存池生成和空间功能的信息


jstat-gcutil[在此处插入pid]将以容量的百分比表示每一代的利用率。查看使用情况非常有用。

如果你愿意,我可以帮助你实现这一点。这取决于你所说的内存使用情况;你是说常驻内存、虚拟内存、使用中的堆、活动对象,它们可能非常不同。这可以通过运行时获得。totalMemory()-freeMemory()注意,这并没有让您知道堆有多满,只是让您知道堆离下一个完整GC有多远。给出了编译错误:类型OperatingSystemMXBean的方法getProcessCpuLoad()未定义。@PSM检查导入。您确定要导入com.sun.management.OperatingSystemMXBean吗?@PSM我认为您仍在使用java.lang.management.OperatingSystemMXBean是否有java 8解决方案?上面给出了一个错误
对于类型OperatingSystemMXBean
@CardinalSystem,getProcessCpuLoad()方法未定义。您检查了导入的包了吗?我在Java8中使用过它