【问题标题】:Unexpected tomcat memroy usage increasing monitored by jconsolejconsole 监控的意外 tomcat 内存使用增加
【发布时间】:2017-01-12 01:56:09
【问题描述】:
我正在学习 jvm,并尝试分析在 tomcat 中使用的内存。 tomcat启动时,Eden使用情况如下图:
Tomcat eden space usage monitored by jconsole
没有在 tomcat 中部署战争,并且删除了所有默认上下文,例如 hostmanager、manager。 Tomcat 在默认配置下启动,并且不接受任何请求。调试模式和无调试模式相同。当 GC 运行时,内存使用量减少了。 是什么导致内存使用量增加? 谁能帮助我?谢谢。
运行环境:
jdk1.8.0_112
apache-tomcat-8.5.9
【问题讨论】:
标签:
java
tomcat
memory
jvm
jconsole
【解决方案1】:
我认为您的问题与您通过 JConsole 看到的内存利用率波动有关。我会尽力在这里提供我的两分钱......
请记住,即使可能没有部署 WAR 文件,仍然有很多代码在该机器上运行以执行各种任务。一个示例是文件监视器,用于识别何时将新的 WAR 文件部署到您的工作目录。每段代码都会定期分配内存,最终会被垃圾回收,因此您会看到内存波动。
另一段可能会占用大量内存的代码是分析器本身。为了让您能够获得通过 JConsole 获得的指标,需要在该盒子上运行一个代理来收集(并存储在内存中)您看到的信息。
如果您想更好地了解 tomcat 实际分配的内容,我建议您使用一个好的 Java Profiler,它可以为您提供有关对象分配的更深入信息。我个人建议YourKit,因为它是我多年来构建软件时使用过的最强大的分析器之一。
现在,可能还有其他原因,但不要仅仅因为您没有直接与 Tomcat 交互就认为它没有做任何事情。
希望这会有所帮助,祝你好运!