分析 Jar 的内存和 CPU 用法
Profiling a Jar's Memory and CPU Usage
当 运行 一个 Java jar 应用程序时,准确地对 CPU 和内存使用情况进行基准测试的最佳方法是什么?我目前正在使用 VisualVM,但我想要一个插件或可以附加到 pom 或项目的东西。
附加:在像 Spring 这样的无服务器应用程序中怎么样?
您可以使用Spring Boot Actuator进行监控。添加 spring-boot-starter-actuator 依赖,配置 application.properties 或 .yaml 文件,您可以看到 cpu 使用 HTTP 请求。
还 java 提供此结构 MXBean。如果需要,您可以创建自己的 MBean 服务器并在 jconsole 上显示 CPU 用法。
public void exampleCPUUsageWithMXBean() {
long previousJvmProcessCpuTime = 0;
long previousJvmUptime = 0;
com.sun.management.OperatingSystemMXBean prepareOperatingSystemMXBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
java.lang.management.OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
long elapsedProcessCpuTime = prepareOperatingSystemMXBean.getProcessCpuTime() - previousJvmProcessCpuTime;
// elapsed uptime is in milliseconds
long elapsedJvmUptime = runtimeMXBean.getUptime() - previousJvmUptime;
// total jvm uptime on all the available processors
long totalElapsedJvmUptime = elapsedJvmUptime * operatingSystemMXBean.getAvailableProcessors();
float cpuUsage = elapsedProcessCpuTime / (totalElapsedJvmUptime * 10000F);
System.out.println(cpuUsage);
}
注意:我推荐Java Mission Control工具。这个工具非常有用,可以显示所有细节。
当 运行 一个 Java jar 应用程序时,准确地对 CPU 和内存使用情况进行基准测试的最佳方法是什么?我目前正在使用 VisualVM,但我想要一个插件或可以附加到 pom 或项目的东西。
附加:在像 Spring 这样的无服务器应用程序中怎么样?
您可以使用Spring Boot Actuator进行监控。添加 spring-boot-starter-actuator 依赖,配置 application.properties 或 .yaml 文件,您可以看到 cpu 使用 HTTP 请求。
还 java 提供此结构 MXBean。如果需要,您可以创建自己的 MBean 服务器并在 jconsole 上显示 CPU 用法。
public void exampleCPUUsageWithMXBean() {
long previousJvmProcessCpuTime = 0;
long previousJvmUptime = 0;
com.sun.management.OperatingSystemMXBean prepareOperatingSystemMXBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
java.lang.management.OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
long elapsedProcessCpuTime = prepareOperatingSystemMXBean.getProcessCpuTime() - previousJvmProcessCpuTime;
// elapsed uptime is in milliseconds
long elapsedJvmUptime = runtimeMXBean.getUptime() - previousJvmUptime;
// total jvm uptime on all the available processors
long totalElapsedJvmUptime = elapsedJvmUptime * operatingSystemMXBean.getAvailableProcessors();
float cpuUsage = elapsedProcessCpuTime / (totalElapsedJvmUptime * 10000F);
System.out.println(cpuUsage);
}
注意:我推荐Java Mission Control工具。这个工具非常有用,可以显示所有细节。