java - Java 8中tomcat jvm的输出Java Real memory usage

标签 java tomcat

我想绘制 Java 8 中 tomcat 门户的 java vm 内存使用情况图表。

Java Runtime 值是错误的,它只给出半准确的估计,例如:

Runtime.getRuntime().maxMemory();

我以为我在 stackOverflow 上找到了一个很好的解决方案,但它只适用于 Java 7:

MemoryPoolMXBean testEdenBean = ManagementFactory.getMemoryPoolMXBeans().get(3);
MemoryPoolMXBean testSurvivorBean = ManagementFactory.getMemoryPoolMXBeans().get(4);
MemoryPoolMXBean testTemurBean = ManagementFactory.getMemoryPoolMXBeans().get(5);

max = testEdenBean.getUsage().getMax() 
    + (testSurvivorBean.getUsage().getMax() * 2) 
    + testTemurBean.getUsage().getMax();

Java VisualVM 给了我真正的值(value),因为如果我用 1024m 启动 tomcat -Xmx,我得到 Max: 1.073.741.824 B,这是正确的。

如何让我的代码输出正确的值?

最佳答案

试试这个:

    MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
    MemoryUsage heapUsage = mbean.getHeapMemoryUsage();
    System.out.println("Max heap memory is "+heapUsage.getMax()/1024/1024+" MBytes");
    System.out.println("Used heap memory is "+heapUsage.getUsed()/1024/1024+" MBytes");

    MemoryUsage nonHeapUsage= mbean.getNonHeapMemoryUsage();
    System.out.println("Max non-heap memory is "+nonHeapUsage.getMax()/1024/1024+" MBytes");
    System.out.println("Used non-heap memory is "+nonHeapUsage.getUsed()/1024/1024+" MBytes");

如果这就是您要找的,请告诉我。

关于java - Java 8中tomcat jvm的输出Java Real memory usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39534162/

相关文章:

java - 有没有办法在编译时为Java定义一个常量值

java - 在 Java 中编码 "exception driven development"的性能成本?

java - 使用 eventBus 从特定 Activity 中清除堆栈 Activity

java - 已为此响应调用 getOutputStream()

java - session.getServletContext() 和 session.getServletContext().getContext 的区别 ("/SampleProject")

http - NullPointerException 被屏蔽为 HTTP 405 错误

c# - 如何将包含 '=' 的字符串添加到字符串列表中?

java - 使用 Selenium 循环遍历 List<WebElement>

Spring Boot + Spring Security + Tomcat = 在应用程序上下文中找不到可见的 WebSecurityExpressionHandler 实例

java - FTPSClient 无法连接