我正在学习jvm,我尝试分析tomcat中使用的内存。当tomcat启动时,Eden的使用情况如下所示: Tomcat eden space usage monitored by jconsole
在tomcat中没有部署war,并且删除了hostmanager,manager等每个默认上下文。 Tomcat是默认配置启动的,没有接受任何请求。它在调试模式下是相同的,没有调试模式。 GC运行时,内存使用量减少。 是什么导致内存使用量增加?任何人都可以帮助我吗?谢谢。
运行环境:
jdk1.8.0_112
Apache的Tomcat的8.5.9
答案 0 :(得分:0)
我假设您的问题与您通过JConsole看到的内存利用率波动有关。我会尽量在这里提供两分钱......
请记住,即使可能没有部署WAR文件,仍然有很多代码在该框上主动运行以执行各种任务。一个示例是文件监视器,用于标识何时将新WAR文件部署到工作目录。每一段代码都会定期分配内存,最终会收集垃圾,从而导致内存波动。
可能消耗大量内存的另一段代码是分析器本身。为了能够获得通过JConsole获得的指标,需要在该框上运行一个代理,该代理正在收集(并存储在内存中)您看到的信息。
如果您想更好地了解tomcat实际分配的内容,我建议您开始使用一个优秀的Java Profiler,它可以为您提供有关对象分配的更深入信息。我个人建议YourKit,因为它是我在多年构建软件时使用过的最强大的分析器之一。
现在,可能还有其他原因,但不要仅仅因为你没有直接与Tomcat交互它没有做任何事情。
希望这有帮助,祝你好运!