我正在学习 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/