java - jconsole 监控的意外 tomcat 内存使用增加

标签 java tomcat memory jvm jconsole

我正在学习 jvm,我尝试分析 tomcat 中使用的内存。 tomcat启动时,Eden使用情况如下: Tomcat eden space usage monitored by jconsole

tomcat中没有部署war,hostmanager、manager等默认的context都被去掉了。 Tomcat 已按默认配置启动,未接受任何请求。在 Debug模式和非 Debug模式下都是一样的。当 GC 运行时,内存使用量减少了。 是什么导致内存使用量增加? 任何人都可以帮助我吗?谢谢。
运行环境:
jdk1.8.0_112
apache-tomcat-8.5.9

最佳答案

我假设您的问题是关于您通过 JConsole 看到的内存利用率波动。我会尽量在这里提供我的两分钱......

请记住,即使可能没有部署 WAR 文件,仍然有大量代码在那个盒子上积极运行以执行各种任务。一个示例是文件监视器,用于识别何时将新的 WAR 文件部署到您的工作目录。每段代码都会定期分配内存,最终会被垃圾回收,因此您会看到内存波动。

另一段可能会消耗大部分内存的代码是探查器本身。为了能够获得通过 JConsole 获得的指标,需要在该盒子上运行一个代理来收集(并存储在内存中)您看到的信息。

如果您想更好地了解 tomcat 实际分配了什么,我建议您使用一个优秀的 Java Profiler,它可以为您提供有关对象分配的更深入的信息。我个人建议YourKit因为它是我在多年的软件构建过程中使用过的最强大的分析器之一。

现在,可能还有其他原因,但不要仅仅因为您没有直接与 Tomcat 交互就认为它没有做任何事情。

希望这对您有所帮助,祝您好运!

关于java - jconsole 监控的意外 tomcat 内存使用增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603903/

相关文章:

java - 在java中从Component[]中删除项目

java - 将 Eclipse 项目导入 intellij 收到未知性质警告

tomcat - java.lang.IllegalStateException : ContainerBase. addChild : start: org. apache.catalina.LifecycleException:组件启动失败

c - malloc创建二维数组时内存是怎么分配的?

c# - GhostScript 光栅器内存不足异常

java - 如何在 Java 小程序中正确指定代码库和存档?

java - 如何合并两个流?

java - 在 proxypassreverse 设置中从 url 中删除应用程序名称

java - @BASE_DIR@/install.log(没有这样的文件或目录)在为 SSO 进行 openam 设置时

java - 在java中处理大数据列表