簡體   English   中英

OpenSSL在Windows上導致非常慢的Rails啟動時間

[英]OpenSSL causing very slow Rails boot time on Windows

我遇到Ruby on Rails運行速度非常慢的問題。 我在Windows 8機器上使用Ruby 2.1.3p242和Rails 4.2.1。

每當我運行需要啟動軌道(包括測試)的任何東西時,啟動和運行需要很長時間。 在干凈安裝的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考慮到它的干凈安裝需要花費很長時間。

在此先感謝您的幫助

編輯-1:我正在運行雙核i3 4010u@1.7GHZ,內存為4GB。 我不認為我的機器太糟糕了,因為它運行得非常好。

編輯-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我查找了該文件中的Ruby21/lib/ruby/2.1.0/securerandom.rb#62行,這是我發現的:

return OpenSSL::Random.random_bytes(n)

所以任何人都知道這意味着什么?

編輯-2:我在Rails.application.initialize上運行了ruby-prof並找到了罪魁禍首。 一個過程占用了85%的運行時間:

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

是的,用於播種隨機數生成器的OpenSSL代碼在Windows上存在問題。 請參閱OpenSSL wiki上的隨機數和Windows問題


 return OpenSSL::Random.random_bytes(n) 

所以任何人都知道這意味着什么?

Ruby正在返回隨機數。 在這種情況下,OpenSSL將在使用RAND_poll重新調整隨機數之前自動進行RAND_poll因為沒有提供其他種子。


紅寶石應該叫RAND_poll或允許它由庫隱式調用。 如果隨機數生成器尚未播種,則庫將通過內部調用RAND_poll自動播種。

相反,Ruby應該使用CryptGenRandom從操作系統讀取字節,然后調用OpenSSL的RAND_seed 這將避免對RAND_poll的調用。

把它放在我的config/application.rb require 'rails/all' )將窗口上的rails s加速10-15秒。

require 'securerandom'
SecureRandom.hex(16)

我現在已經有一段時間了。 我從來沒有解決過這個rails啟動問題。 運行微秒Rspec測試需要22秒才能在我的PC上加載。 當我(暫時)在securerandom.rb(所有ruby版本)中注釋掉該行並將其替換為硬編碼返回時,啟動時間減少到10秒。

#return OpenSSL::Random.random_bytes(n)
return "\xD3\x04F\f0\xD6{G\xB9\x81"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM