使用 Java 1.7 时,Coldfusion 10 的速度比 1.6 慢

2022-09-02 14:05:05

我有一个 Web 服务正在 上运行。在调查内存泄漏时,我去将JRE从1.6升级到1.7,但注意到性能受到显着影响。我创建了一个简单的测试Web服务,在JRE 1.6上,只要我将JRE更改为1.7,我就可以很容易地以每分钟5000个请求的速度运行,尽管这个速率每分钟下降2000个或更少。有没有人知道调整设置或我缺少的东西。Coldfusion 10 64bit

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

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

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

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

遵循了此处的建议,但性能没有提高。将使用jvisualvm进行审查并发布我的发现。

更新:Java 7改变了它处理同步类装入器的方式,看起来这可能是速度变慢的原因。

更新Adobe已经承认了这个错误,并希望修复它。Adobe bug base record。


答案 1

对此的回答是Adobe已经承认该错误并希望修复它。Adobe bug base record


答案 2

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

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

您所指的类装入器更改实际上应该可以提高类装入操作的并发性,但仍然不可能触发环境中的某些缓慢。

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

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


推荐