CFHTTP:第一次请求快,后续请求慢

8

我目前在使用CF10的CFHTTP时遇到了很多麻烦。

首先,这是我的测试脚本:

<CFSET results = arraynew(1) />
<CFLOOP from="1" to="10" index="idx">
    <CFSET timer_start = getTickCount() />
    <CFHTTP url="https://www.google.de" method="get" result="test" />
    <CFSET arrayappend(results, (getTickCount()-timer_start)/1000 & " s") />
</CFLOOP>
<CFDUMP var="#results#" />

连续进行 10 次 CFHTTP 调用,将其所需时间存入数组中;这就是全部内容。

我们的 CF9 服务器的结果:

CF9 CFHTTP TEST RESULTS

我们CF10服务器的结果:

CF10 CFHTTP TEST RESULTS

我们的CF10服务器在CFHTTP调用之间有5秒的延迟,以下是结果:

CF10 CFHTTP TEST RESULTS WITH DELAY BETWEEN CALLS

我已经在论坛Shilpi的博客上阅读到,原因可能是Linux服务器熵值不足。 我在我的测试脚本运行时使用 watch --interval=0.1 cat ... 进行了检查,但它从未低于4k(已安装 rngd)。
还有其他人有什么想法可以尝试解决这个问题吗?对我来说,使用 /dev/urandom 看起来是一种不安全的方法;因此这不是一个选项(因为CF10服务器是生产机器)。
谢谢大家!

服务器正在运行最新的CF10更新11,对吗? - Peter Boughton
是的,没错。操作系统是CentOS 6.3。Java版本是1.6.0_29。 - Seybsen
他们不再维护Java 1.6,建议您升级到1.7版本。不过不确定这是否会对您的问题产生影响。 - Miguel-F
1个回答

4
在向 ColdFusion 服务器进行 cfhttp 调用时,Apache HttpClient 库尝试生成一个安全的随机数。这是一个依赖于系统“熵”的操作。
对于 Linux 系统(主要是新安装的系统),观察到这个操作可能非常耗时,因为系统“熵”显然很低。因此,作为后果,cfhttp 调用将会很慢。
解决方案:将“-Djava.security.egd=file:/dev/./urandom”添加到您的 jvm-setting 中。
在 Adobe 论坛上,您可以找到另一个带有相同解决方案和随后链接的线程,其中包含有关随机数生成器的进一步信息:http://forums.adobe.com/thread/1063806
来源: http://blogs.coldfusion.com/post.cfm/optimizing-cfhttp-calls-on-linux-systems

使用/dev/urandom是一个安全的解决方案,没有不使用的必要: https://security.stackexchange.com/a/3939


OP已经在问题中明确表示他们不想使用/dev/urandom选项。他们正在寻找另一种解决方案。 - Miguel-F
Adobe的安全专家在她的博客上写道:“注意:#1是最好的解决方案,也是最安全的。然而,在开发阶段和测试环境(即使是在您准备妥协安全性的系统中),#4解决方案是我使用和推荐的。”其中#1是使用类似rngd的东西,而#4是使用/dev/urandom。(http://www.shilpikhariwal.com/2012/04/random-number-generation-in-unix.html) - Seybsen
3
Thomas Pornin(da_didi链接中的答案作者)是一位专业的密码学家-请查看他在http://security.stackexchange.com上的回复以了解他的资历。如果他说/dev/urandom是安全的,那么我会要求任何不同意的人证明他们为什么认为他是错误的。 - Peter Boughton
在@Seybsen上面引用的文章中,她甚至指出/dev/urandom是安全的。从那个页面上可以看到:尽管/dev/urandom始终会提供随机字节,但一旦初始缓冲区被耗尽,它们可能会变得质量较低。但请注意,我并不意味着它完全不安全。 - Miguel-F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接