【问题标题】:JVM performance with these garbage collection settings使用这些垃圾收集设置的 JVM 性能
【发布时间】:2014-07-25 02:11:19
【问题描述】:

我有一个每天为几千名用户提供服务的企业级 Java 应用程序。这是 weblogic 10.3.6 (Java 1.6 JVM) 上的 JAXB Web 服务,使用 Hibernate 访问 Oracle 数据库。它还调用其他 Web 服务。

我们在生产系统上调整了以下 GC 设置:

-server -Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m

这个 GC 大小有什么影响?硬件有足够的能力来处理它。

我知道这会将堆大小和 perm gen 设置在一个稳定的水平。但是,当您最终必须进行垃圾收集时,这会产生什么影响?

在我看来,这似乎会使 GC 发生的频率降低,但发生时会花费更长的时间。听起来对吗?

【问题讨论】:

    标签: java performance garbage-collection jvm jvm-arguments


    【解决方案1】:

    我想说,在决定大小之前请先监控 GC,因为您永远不知道应用程序在负载下会如何表现。看看这个linkthis 它有一些关于 GC 和计算相同的工具的很好的参考资料。

    【讨论】:

      【解决方案2】:

      它会降低 GC 发生的频率,但当它发生时需要更长的时间

      可能,这取决于您的用例。在极少数情况下,您甚至可能会发现 GC 更短。

      2 GB 的堆并不多,我最多可以使用 26 GB,而不必担心堆大小。超过这个大小的内存访问会慢​​一些或使用更多的内存。

      【讨论】:

      • 谢谢,这就是我认为会发生的事情。所以做这件事的小组做得对——他们正确地设置了堆大小并让它们保持这种状态。他们已将堆增加到 2 GB。
      • @AlanDelimon 您希望将最大堆大小设置为您宁愿进程失败而不是使用更多内存的点。您不必将最小值设置为最大值。我会将最小值设置为您期望 JVM 使用的量,这可能小于最大值。
      【解决方案3】:

      将 -Xmx & -Xms 和 PermSize & MaxPermSize 设置为相同大小将阻止 JVM 根据您的要求调整堆大小。这些调整大小很昂贵,因为它们会触发 Full GC。

      -server 将允许 JVM 使用服务器编译器,它会在将您的代码编译为本机汇编指令之前进行更积极的优化。尽管现在任何具有 2 个或更多内核和 2GB+ 内存的机器都将默认启用服务器编译器。

      增加内存并不总能解决问题。有时添加更多内存会产生开销。

      如果您需要有关 GC 的详细信息,可以试试这个link

      调整某些内容的真正原因是提高应用程序的性能,从而实现吞吐量和延迟目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多