gpt4 book ai didi

ruby-on-rails - OpenSSL 导致 Windows 上的 Rails 启动时间非常慢

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:07 24 4
gpt4 key购买 nike

我遇到了 Ruby on Rails 运行极其缓慢的问题。我在 Windows 8 机器上使用 Ruby 2.1.3p242 和 Rails 4.2.1。

每当我运行任何需要 rails 启动的东西(包括测试)时,启动和运行都需要很长时间。我在全新安装的 rails 上对 config/environment.rb 中的 Benchmark 进行了一些调用:

require File.expand_path('../application', __FILE__)
User cpu System Cpu Total Cpu elapsed time
0.000000 0.000000 0.000000 (0.000000)

Rails.application.initialize!
15.282000 2.891000 18.173000 ( 18.201173)

显然 Rails.application.initialize 考虑到它是全新安装,花费了荒谬的长时间。

预先感谢您的帮助

Edit-1:我在双核 i3 4010u@1.7GHZ 上运行,内存为 4GB。我不认为我的机器太糟糕,因为它可以很好地运行大多数东西。

Edit-2:我在 Rails.application.initialize 上运行了 ruby-prof 并找到了罪魁祸首。一个进程占用了 85% 的运行时间:

<Module::SecureRandom>#random_bytes
<Module::OpenSSL::Random>#random_bytes

这显然发生在 Ruby21/lib/ruby/2.1.0/securerandom.rb#62我在那个文件中查找了第 62 行,这是我发现的:

return OpenSSL::Random.random_bytes(n)

所以有人知道这意味着什么吗?

最佳答案

Edit-2: I ran ruby-prof on Rails.application.initialize and found the culprit. A process was taking up 85% of the run time:

<Module::SecureRandom>#random_bytes
<Module::OpenSSL::Random>#random_bytes

是的,用于为随机数生成器设定种子的 OpenSSL 代码在 Windows 上存在问题。参见 Random Numbers and Windows Issues在 OpenSSL wiki 上。


return OpenSSL::Random.random_bytes(n)

So anyone have any idea what this means?

Ruby 正在返回随机数。在这种情况下,OpenSSL 将在使用 RAND_poll 重新调整随机数之前自动播种,因为没有提供其他种子。


Ruby 不应调用RAND_poll 或允许库隐式调用它。如果随机数生成器尚未播种,则该库将通过在内部调用 RAND_poll 自动为自己播种。

相反,Ruby 应该使用 CryptGenRandom 从操作系统读取字节,然后调用 OpenSSL 的 RAND_seed。这将避免调用 RAND_poll

关于ruby-on-rails - OpenSSL 导致 Windows 上的 Rails 启动时间非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com