gpt4 book ai didi

java - VisualVM监控内存使用情况

转载 作者:行者123 更新时间:2023-12-01 16:00:41 25 4
gpt4 key购买 nike

在我的 tomcat 启动中,我将 -xms 、 -xmx 设置为 1GB。当我监视内存时在 VisualVM 内

  1. 当我对内存进行采样时,它不会显示准确的内存使用情况,直到我按“快照”,然后利用内存的 java 类才会显示正确的模式和实例计数。为什么会这样?

  2. 另外,当我将 tomcat 内存设置为 1GB 时,内存会继续增加 zip-zat 并上升到大约 960mb。直到我按“perform gc”并且内存回到200mb..

  3. 您认为需要创建调度程序来强制每天午夜在 jvm 上执行 Perform.gc() 吗?

我的描述中的任何评论

VisualVM screenshot

最佳答案

我相信您在这里看到的是并发垃圾收集器正在执行年轻代清理,但堆不断搅拌,因此它无法获取老一代收集的所有引用。当您点击“执行 GC”按钮时,您正在执行“停止世界”收集,该收集会阻止所有线程、卡住堆并允许发生更大的收集。我在这里主要关心的是 - 是否曾经发生过大型收集(x 小时后)?您是否在较小的堆中看到 OutOfMemory 错误?

1) 您是否打开了自动刷新按钮?也可能是分析器在拍摄快照之前执行一次小型 GC(Eden 空间)。

2) 这是完全正常的。垃圾收集需要时间和资源(处理器周期)。如果您将堆设置为很大的大小,它将等到它达到一定百分比,然后触发垃圾收集本身。我认为默认的可用空间与 Activity 对象的比率在 40% 到 70% 之间,我知道 tomcat 在版本 5 中专门改变了垃圾收集的方式,tomcat v4 存在性能问题,因为它花费了大量时间运行垃圾收集器。您可能想在这里做一些研究,看看 tomcat 是否有自定义垃圾收集选项。

3) 不。几乎满的堆正是您所追求的。缩小堆可能是有意义的,这样完整的垃圾回收就不会花费这么长时间。这是大量垃圾收集(暂停)和长时间垃圾收集(长时间暂停)之间的权衡。每个应用程序都是不同的,因此我通常从默认值开始,然后根据需要进行调整。如果您感兴趣,有很多垃圾收集(和备用收集器)选项。

Java 5

Java 6 FAQ , Whitepaper

关于java - VisualVM监控内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020765/

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