java - 如何使用 perfmon 记录 tomcat 进程的 CPU 和内存使用情况

标签 java tomcat memory perfmon

我的 Java 应用程序部署在 Tomcat 应用程序服务器上。使用 TaskManager,我可以看到 CPU 和内存使用情况。 Jconsole 显示的同一进程 ID 的内存使用情况与任务管理器显示的内存使用情况不同。这是因为任务管理器显示整个系统内存,而 Jconsole 显示分配给 JVM 的内存。如果我的理解有误,请指正。

我想通过我的 Java 应用程序进程 ID 记录特定时间跨度内的内存和 CPU 使用情况。如果我尝试使用 perfmon,它会显示所有进程的使用情况。有什么方法可以在 perfmon 中为一个特定的进程 ID 以及我需要在其中选择哪些计数器进行配置。

谢谢。

最佳答案

"I want to log memory and CPU usage by my java application process Id for a particular span of time."

您可以使用 JavaMissionControl 中的 FlightRecorder。它可以在 Oracle JDK(我认为 >6)的二进制目录中找到,它叫做“jmc.exe”。将以下参数添加到 Tomcat,可能是 CATALINA_OPTS:

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder 

如果您只对值感兴趣,可以使用 JMX。也看看 JavaMissionControl 中的“MBeanBrowser”。例如:

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
double cpuLoad = (double) mbeanServer.getAttribute(new ObjectName("java.lang", "type", "OperatingSystem"), "SystemCpuLoad");

关于java - 如何使用 perfmon 记录 tomcat 进程的 CPU 和内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30479471/

相关文章:

java - 如何使用 JDialog、JPanel 解决图形故障?

java - 无法使 Maven 测试范围的依赖项与 Java 9(或 10)模块一起使用

选择游戏窗口时 Java 机器人不工作

tomcat - 有没有办法让 Tomcat 在 WAR 部署后立即启动应用程序?

java - 为 apache-tomcat-9.0.5 启用 brotli 压缩

Java Runtime.getRuntime().freeMemory() 问题

java - 如何使用应用程序抛出异常时记录的转储来调试生产java?

PHP Curl 不适用于端口 8080

linux - 什么东西正在消耗内存并且在 ps 输出中不可见?

c++ - 如何使用 shared_ptr 来管理已经引用计数的托管对象?