gpt4 book ai didi

java - 垃圾收集 - 改变收集器算法

转载 作者:行者123 更新时间:2023-12-01 11:10:22 25 4
gpt4 key购买 nike

我们在 Tomcat (Java 1.5) 上运行 Spring+Hibernate Web 应用程序。目前我们使用 2GB 的堆空间(我被告知这是 Solaris 32 位服务器上可能的最大值,尽管服务器总共有 16GB RAM)。当前的 JAVA_OPTS 是:

-XX:MaxPermSize=512m -XX:+UseParallelGC -Xms2048m -Xmx2048m

Young Gen + Survivor 空间约为 600 MB,Old Gen 为 1.4 GB。

有时内存已满,我们需要重新启动 Tomcat。以下是观察结果:

  • 在服务器大约 16 小时的主动运行中,GC 花费大约一个小时进行 MarkSweep(约 300 个收集 - 老一代)和 5 - 7 分钟的 Scavenging(约 1500 个收集 - 年轻一代)。
  • 有时老一代在 10 分钟内就满了,我们需要重新启动服务器。识别导致 is 的线程不是很成功

  • 我们想更改为以下 JAVA_OPTIONS - 我需要反馈这是否是明智的选择(UAT 环境与 Prod env 的负载不匹配,我们无法在 UAT 中复制相同的内容)
  • 添加 -Xmn1024m - 这是为了确保年轻一代对象不会轻易提升为老一代。关于增加/减少这个有什么建议吗?这也会导致更多的 Young Gen GC 和更少的 Old Gen GC。
  • -XX:+UseParallelOldGC - 这是为了让 Young Gen 和 Old Gen GC 运行多个线程,以便它们更快地获得 GC。
  • 2GB 的限制是否也适用于 Solaris 服务器?堆不能增加到2GB以上吗?

  • 请分享您对上述内容的看法。

    谢谢,
    米顿

    最佳答案

    如果您经历过长时间的主要收集暂停,您应该考虑使用 -XX:+UseConcMarkSweepGC (并保留 -XX:+UseParallelOldGC )以便同时执行 GC。

    您使用 -Xms2048m -Xmx2048m 的事实可能是个坏主意,如果这些值不是很好,你不要让 JVM 缩放它们(但如果你确定没问题)。
    Java 性能调优第二版。 关于堆大小的 5 个常见建议:

    1. Set the starting heapsize the same as the max heap size
    2. Set the starting size to the size needed by the max number of alive objects and set the max to 4 times this amount
    3. Set the starting heap to max heap size
    4. Set the starting heap size between 1/10 and 1/4 the max heap size
    5. Use the default initial heap size


    (试着找到最适合你的)

    该文档给 resolve GC issue 提供了很好的建议,请仔细阅读关于 的段落世代规模调整并尝试一些命令来打印您的 GC Activity ,其中一些确实有助于查看您的应用程序或 GC 配置中的一些瓶颈。

    关于java - 垃圾收集 - 改变收集器算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299339/

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