【发布时间】:2015-03-19 20:08:59
【问题描述】:
我在 Redhat Linux 服务器上安装了 ColdFusion 11。有时,我可以看到某种程度的缓慢。当它很慢时,我可以看到总是有一个阻塞的 SeedGenerator 线程在等待。如果有人可以提供有关如何解决问题的提示,我们将不胜感激。以下是一些相关数据:
- 服务器:Linux 2.6.32-504.1.3.el6.x86_64 #1 SMP Fri Oct 31 11:37:10 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
- 物理内存:6GB
- CPU:Intel(R) Xeon(R) CPU X5560 @ 2.80GHz
- java:coldfusion 内置 1.7.0_55-b13
- jvm: -Xms256m -Xmx2048m -XX:MaxPermSize=192m -Dcoldfusion.jsafe.defaultalgo=FIPS186Random
我还启用了 JMXremote。 JConsole 表示堆内存使用峰值为 700MB,permgen 峰值为 120MB。 Linux top 命令指示 CPU 使用率较高,而 Jconsole 显示 SeedGenerator 线程不时使用 99% 的 CPU。
我检查了操作系统随机数池,/proc/sys/kernel/random/entropy_avail 一直至少有 120 个(大多数时候这个数字在 120 到 190 之间)。我什至使用 rngd 来增加可用的随机位,但这无济于事。我还删除了 /dev/random 并将 /dev/urandom 链接到它而没有任何改进。
SeedGenerator 线程的堆栈跟踪是:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:503)
sun.security.provider.SeedGenerator$ThreadedSeedGenerator.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
【问题讨论】:
-
当我们遇到“缓慢”时,几乎总是由于代码执行效率低下。检查您的 http 日志以查看当时正在运行的内容。
-
应用程序部署在 CF9(with jrun) 上,没有任何性能问题。现在,相同的应用程序也部署在 Windows8(带有 tomcat 的 CF11)上,捆绑的 jre 与 linux 部署具有相同的 jvm 参数,没有问题。观察到的缓慢总是在 SeedGenerator 线程被阻塞时发生。我不确定 FIPS186Random 需要多少随机位。也许 /dev/random 中的 120 个随机位是不够的。
标签: performance coldfusion coldfusion-11 random-seed