由于阻塞的 SeedGenerator 线程,Linux 上的 ColdFusion 11 服务器运行缓慢
ColdFusion 11 server on Linux slowness due to blocked SeedGenerator thread
我已经在 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_64GNU/Linux
- 物理内存:6GB
- CPU:英特尔(R) 至强(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。
我检查了 OS 随机数池并且 /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)
折腾了一天,终于想出了一个临时的解决方案,性能提升了很多。将“-Djava.security.egd=file:/dev/./urandom”添加到 jvm 将指示 Tomcat 使用 /dev/urandom 而不是默认的 /dev/random。请注意,非阻塞 /dev/urandom 不如 /dev/random 安全。如果你真的想要 SSL/SSH 左右的高安全性,你需要用一些随机数生成硬件来增强系统。
有关更多故障排除说明,请参阅 here。
我已经在 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_64GNU/Linux
- 物理内存:6GB
- CPU:英特尔(R) 至强(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。
我检查了 OS 随机数池并且 /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)
折腾了一天,终于想出了一个临时的解决方案,性能提升了很多。将“-Djava.security.egd=file:/dev/./urandom”添加到 jvm 将指示 Tomcat 使用 /dev/urandom 而不是默认的 /dev/random。请注意,非阻塞 /dev/urandom 不如 /dev/random 安全。如果你真的想要 SSL/SSH 左右的高安全性,你需要用一些随机数生成硬件来增强系统。
有关更多故障排除说明,请参阅 here。