使用Java 1.7时,Coldfusion 10比1.6慢

时间:2014-02-13 15:27:35

标签: java coldfusion java-7 coldfusion-10

我在Coldfusion 10 64bit上运行了一个网络服务。在调查内存泄漏的同时,我将JRE从1.6升级到1.7,但发现性能受到重大影响。我创建了一个简单的测试Web服务,在JRE 1.6上,只要我将JRE更改为1.7,我就能以每分钟5000个请求轻松运行,尽管此速率每分钟下降2000或更少。有没有人知道调整设置或我缺少的东西。

首选是使用JRE 1.7,因为它似乎修复了我遇到的内存泄漏问题。

  • 运行服务器JRE:java版本“1.7.0_51”Java(TM)SE运行时环境(版本1.7.0_51-b13)Java HotSpot(TM)64位服务器VM(版本24.51-b03,混合模式)

  • JVM设置中的垃圾收集:-XX:+UseParallelGC

  • 将垃圾收集更改为:-XX:+UseG1GC这没有任何区别。

关注the recommendations from here但性能没有提升。将与jvisualvm一起审核并发布我的发现。

更新 Java 7有changed the way it deals with synchronizing class loaders,看起来这可能是导致速度放缓的原因。

更新 Adobe已经承认了这个漏洞,正在寻找解决方案。 Adobe bug base record.

2 个答案:

答案 0 :(得分:5)

对此的回答是,Adobe已承认该错误并正在寻求修复它。 Adobe bug base record

答案 1 :(得分:1)

我建议您在两次负载测试运行(JRE 1.6与JRE 1.7)之间查看JVM线程转储数据。我在过去看过CF10类加载器问题与cfdump和cfquery in-memory的使用有关(查询查询)。

将您的分析重点放在JRE 1.7可能遇到的任何线程锁争用问题上。

您所指的类加载器更改应该实际上提高了类加载操作的并发性,但仍然不可能在您的环境中引发一些缓慢。

另一个建议是查看GC内存分配率。为此,打开verbose:gc并比较两次运行之间的输出数据。确定GC内存分配率和/或GC频率的任何增加是否是导致吞吐量下降的根本原因。

最后,对JVM参数进行非常仔细的审查。确保您的Java堆调整参数(包括堆大小)与JRE 1.6完全相同,因此我们可以比较苹果与苹果。