gpt4 book ai didi

java - 为什么tomcat在空闲期间使用越来越多的堆空间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:21 26 4
gpt4 key购买 nike

我使用 startup.bat 启动 tomcat,不再使用它。据我所知,这是一个普通的普通安装(版本 7.0.47)。当使用 JMX 工具(如 VisualVM)连接时,我看到堆空间的使用量不断增加。直到发生一些垃圾收集。然后一切从头再来。

为什么会这样? tomcat在那里做什么?

我的理解对吗,它不断生成新的对象?

enter image description here

正如@Thilo 所建议的,我拍摄了堆直方图的快照。它似乎主要创建对象数组、字符数组和字节数组。下图显示了相隔 3 分钟拍摄的两张快照之间的差异。

enter image description here

正如“每线程分配” View 所示,它与 RMI 有关,因为在这里可以看到最大的增加。

enter image description here

最佳答案

简短的回答:别担心,这是完全正常的。 :-)

长*答案,正如@Gimby 所建议的,是 Tomcat(像大多数服务器一样)有多个线程一直在运行,以监控资源和健康检查等事情。这些线程每隔一段时间唤醒并创建一个很多短暂的对象。 GC(垃圾收集器)不会立即收集这些对象。分析应用程序将看到堆在固定时间间隔内不断增加,或者直到达到阈值然后突然下降。下降是由 GC 启动引起的,一次扫描收集了所有短暂的对象。这将导致您看到“锯齿”图案。同样,这是完全正常的。

如果您有兴趣,请阅读有关 Java garbage collection 的更多信息在 Oracles Java 教程页面。

唯一需要注意的是,锯齿图案的峰值变得越来越高,或者每个峰值之间的持续时间变得越来越短。这可能 表示应用程序中存在资源/引用泄漏。但在大多数情况下,这只是您的应用程序使用了更多内存,因为它确实在做一些事情。


*) 我相信有人可以提供比这更长、更深入的答案,但这更适合博客或技术文章。 ;-)

关于java - 为什么tomcat在空闲期间使用越来越多的堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com