使用Java 1.7时,Coldfusion 10比1.6慢

我有一个在Coldfusion 10 64bit上运行的web服务。 在调查内存泄漏的同时,我将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这没有任何区别。

遵循此处的建议 ,但性能没有提高。 将与jvisualvm一起审核并发布我的发现。

更新: Java 7 改变了处理同步类加载器的方式 ,看起来这可能是导致速度减慢的原因。

更新 Adobe已承认该错误并正在寻求修复它。 Adobe bug基础记录。

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

我建议您在两次负载测试运行(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完全相同,因此我们可以比较苹果与苹果。