2015-12-20 105 views
2

我们计划将目前在Java5堆栈上运行的企业应用程序迁移到Java7堆栈。我们遇到问题隐含 gc呼叫(主要是gc)导致系统在短时间内不稳定(范围从5分钟到30分钟)。在分析gc统计数据后,我们发现紧凑型阶段与标记和扫描阶段相比需要很长时间才能完成。我知道压缩是非常复杂和耗时的,但它影响了面向客户的应用服务器,并且在此阶段很少有连接被中断。Java7 vs java5垃圾回收

现在,我的问题是,我们正在迁移到Java7,有比Java5更好的垃圾收集过程吗?

应用程序服务器提供体面的系统资源。

  1. 每个应用服务器包含32个CPU核心
  2. 包含64 GB的RAM
  3. 应用服务器是IBM webpshere服务器
  4. 操作系统 - 64位的IBM AIX

正如前面所说的,GC由于隐式系统调用而发生。没有明确的系统调用调用gc。

+0

你能为你的java5配置提供GC日志和设置吗? – the8472

回答

1

现在,我的问题是,我们正在迁移到Java7,有没有更好的垃圾收集过程与Java5相比?

一般来说是的,但正如@Pushkar,你真的应该被迁移到Java 8

随着向你的应用程序(一个或多个)的细节,这听起来像你需要调整/重新调整垃圾在Java 5上收集。如果由于GC而定期经历5到30分钟的不稳定性,则存在一些相当不对的情况。当前的行为可能是由于您的应用程序或Websphere(例如内存泄漏,过度缓存等)导致的,或者可能是由于糟糕的GC调优。

简而言之,切换到Java 7(或8)可能使事情变得更好,但您很可能需要付出更多努力来解决问题的根本原因。

最后,我建议一些明显的事情。

  • 以小步骤实施更改。不要在一段时间内升级您的应用程序,websphere版本,java版本等。

  • 对服务器进行一次升级。有一个回滚计划,如果你得到不可接受的表现。

  • 如果可能,先测试一下......包括性能/负载测试。

+0

谢谢斯蒂芬。你的建议真的有效。我们无法迁移到java8,因为我们升级的框架不支持java8。所以,我们将不得不坚持java7。我们在应用程序中过度缓存。这可能是频繁调用gc的强有力原因之一。作为一种解决方法,我们关闭了缓存搜索结果,结果是积极的。正在接受僵尸程序请求的应用程序服务器仍然存在问题,并且此问题很少出现。谢谢你的答案。 – harshavmb

+0

我很高兴我的建议(实际上是猜测)对您有所帮助,但您确实需要将您的框架迁移到Java 8,这是一个非常重要的优势。 –

1

默认情况下,Java 7在服务器类机器上使用parallelGC。如果您使用的是JDK 7 update 4或更高版本,请切换到G1垃圾收集器,这可能会使您获得更好的性能。但是正如@ 8472所建议的那样,最好知道你在java 5中使用了什么设置,现在在你当前的环境中。

1

Java 7在2015年四月左右达到了生命的终点。为什么不迁移到1.8?

GC的性能通常会随着Java主要版本(以及某些情况下使用次要GC)而改善。

你应该看一看差GC优标志,下面的链接可以帮助你 http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html

http://stas-blogspot.blogspot.com/2011/07/most-complete-list-of-xx-options-for.html

+0

感谢普什卡为你的答案。我们无法迁移到java8,因为我们升级的框架不支持java8。所以,我们将不得不坚持java7。我们确实关闭了缓存搜索结果,它确实帮助应用服务器频繁地生存。谢谢你的回答。 – harshavmb