Fra*_*ero 14 java tomcat memory-management jvisualvm
相关问题:从Java 6 + Tomcat 6升级到Java 8 + Tomcat 8时的垃圾收集器使用情况
我有一组用Java 8编译的webapps.如果我在Tomcat 8中运行它们,我会得到许多带有随机内存分配的次要GC集合.在Tomcat 6中,内存分配更加线性和稳定(两种情况下都是空闲,没有流量).
伊甸园太空雄猫8:
伊甸园空间雄猫6:
你知道为什么会这样吗?
编辑1:
这些是来自生产环境的数据,包括jdk 1.8和Tomcat 8.由于GC循环,CPU几乎总是很高.对此有何评论?
编辑2:
这是一个heapdump analisis(1.8GB转储):
这是伊甸园空间,而不是终身空间。所以,仅此一点就是好消息。
但这一步内存似乎是 tomcat8 在一次年轻的 GC 之后立即分配一些东西。这可能是某种“气球”技术吗?(分配一个大的弱引用缓冲区来快速“收缩”,以在内存压力的情况下确保一些空间)。它也可能隐藏在 NIO 连接器中,如“oomParachute”参数(默认情况下为 1 MB,但它是每个 httpprocessor 线程吗?如果您有 200 分钟线程,则将与所看到的 200 MB 匹配)。
我只会建议您深入研究变更日志,以查找您可能认为它们像气球机制一样浪费实施的新事物或更改。
另外:你应该在jdk8中运行tomcat6,看看是否真的是tomcat8有问题。eden 空间可以做得更大,以防万一 G1GC 过于激进,以至于在仅使用 200MB 时它就觉得有义务进行 GC。