我在Redhat Linux服务器上安装了ColdFusion 11。有时,我能看到一些缓慢。当它很慢的时候,我可以看到总是有一个阻塞的SeedGenerator线程在等待。如果有人能提供如何解决这个问题的提示,我们将不胜感激。以下是一些相关数据:
- 服务器:Linux 2.6.32-504.1.3.el6.x86_64#1 SMP美国东部时间2014年10月31日星期五11:37:10 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=FIPS186随机
我还启用了JMXremote。JConsole表明,堆内存的峰值使用量为700MB,峰值置换量为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)
经过一天的努力,我终于想出了一个临时解决方案,大大提高了性能。在jvm中添加"-Djava.security.egd=file:/dev/./urandom"将指示Tomcat使用/dev/urandom,而不是默认的/dev/random。请注意,非阻塞/dev/urandom的安全性不如/dev/random。如果您真的想要SSL/SSH的高安全性,那么您需要用一些随机数生成硬件来增强系统。
有关更多疑难解答说明,请参阅此处。