2010-08-17 24 views
18

CẬP NHẬT 2 Đây là một lỗi/tính năng đã biết với cách Ruby 1.9.2 tải tệp. http://twitter.com/#!/rails/status/72801149769621504Rails 3 thời gian khởi động máy chủ ứng dụng là dài

Cập nhật: Điều này bắt đầu như một câu hỏi, nhưng sau khi làm việc trên một chút, tôi nghĩ rằng nó có thể không khắc phục được. Tôi nghĩ rằng tôi sẽ đăng bài này trong trường hợp bất cứ ai khác đang nhìn thấy điều tương tự và đang tự hỏi những gì đang xảy ra bên trong đường ray và bundler.

Có ai khác đang xem thời gian tải lâu trong ứng dụng Rails 3 của họ không? Tôi đã đặt bộ hẹn giờ trong môi trường.rb, application.rb, boot.rb và railties/lib/rails/initializable.rb. Thời gian được tính bằng giây và thời gian trôi qua là thời gian kể từ lần ghi cuối cùng. Thời gian tải sản xuất lâu hơn một chút. Một phần vì phần cứng ít hơn và cũng từ eager_load! (và có thể từ Thin vs Mongrel). Có vẻ như Bundler đang chiếm một phần lớn thời gian tải và tôi đoán đó là điều được mong đợi. Tôi đã thử nghiệm một trong các ứng dụng trong dev và prod và một ứng dụng trống trong dev. Tôi đã thử nghiệm 2 máy chủ ứng dụng chỉ để xem liệu nó có phải là Thin gây ra nó hay không. Tôi cũng nhìn thấy những điều tương tự với Hành khách trong sản (làm cho nó không thể sử dụng b/c của hành vi sinh sản trong 2.2.15). Tôi đã thử nghiệm với Edge Rails và hiệu năng trong dev là 14,5s so với 14,2s. Nếu tôi loại bỏ các phụ thuộc thử nghiệm của tôi, nó tiết kiệm được 2-3 giây, nhưng điều này không giúp ích gì khi tôi chạy thử nghiệm. Tôi đoán nó chỉ là một chút khó chịu chờ đợi 5 phút cho tất cả các trường hợp Thin của tôi để khởi động lại và cũng chờ đợi 15 giây trước khi thử nghiệm của tôi chạy, nhưng nó là một sự cân bằng chấp nhận được vào thời điểm này vì năng suất tôi đạt được với Rails 3. Nếu ai có bất kỳ ý tưởng để giúp tăng tốc mọi thứ, tôi là tất cả các tai. Dưới đây là kết quả kiểm tra:

Lưu ý: ứng dụng của tôi trong Rails 2.3 được tải trong chưa đầy 3 giây trong dev (mặc dù tôi đã chuyển đổi một chút mã thành công cụ và thêm đá quý và đá granit twitter_oauth kể từ khi di chuyển đến rails3)

** Tất cả các bài kiểm tra được tiến hành với Rails 3RC và Ruby 1.9.2rc2

Prod với Thin - CentOS 5.5, máy chủ điện toán đám mây Rackspace dụ 2GB
thử nghiệm App # 1 với 24 phụ thuộc ngọc

 
start env.rb - Total=0 
    start app.rb - 0.00110546 elapsed. Total=0.001180052 
    start boot.rb - 0.000600488 elapsed. Total=0.00178644  
    end boot.rb - 0.7935529 elapsed. Total=0.795507318 
    start require rails/all - 0.000189127 elapsed. Total=0.795701199 
    end require rails/all - 1.086998364 elapsed. Total=1.882735263 
    start Bundler require - 0.000109708 elapsed. Total=1.88285043 
    end Bundler require - 8.955853243 elapsed. Total=10.838746673 
    end app.rb - 0.062975913 elapsed. Total=10.901753753 
    # /railties-3.0.0.rc/lib/rails/initializable.rb 
    start run initializers - 0.000145906 elapsed. Total=10.901910186 
    load_environment_config - 0.116689774 elapsed. Total=11.018632298 
    initialize_cache - 0.246161343 elapsed. Total=11.320543397 
    active_record.initialize_database - 0.080047485 elapsed. Total=11.400961893 
    bootstrap_hook - 1.034189984 elapsed. Total=12.451309104 
    active_support.initialize_time_zone - 1.969821814 elapsed. Total=14.448777651 
    action_controller.set_configs - 0.594991537 elapsed. Total=15.044692126 
    will_paginate.active_record - 0.324460921 elapsed. Total=15.386837641 
    will_paginate.action_view - 1.904889132 elapsed. Total=17.328981523 
    add_view_paths - 0.087811847 elapsed. Total=17.42011881 
    load_init_rb - 0.151282681 elapsed. Total=17.709093173 
    load_init_rb - 0.362241273 elapsed. Total=18.071865548 
    load_config_initializers - 0.144051305 elapsed. Total=18.217433492 
    build_middleware_stack - 2.569453884 elapsed. Total=20.826842081 
    eager_load! - 4.165919064 elapsed. Total=24.99280168 
    finisher_hook - 0.48795935 elapsed. Total=25.480807439 
    repopulate_roles - 0.504085662 elapsed. Total=25.984901297 
    end run initializers - ~0.00005 elapsed. Total=25.985617783 
end env.rb - ~0.00006 elapsed. Total=25.985683903 

Dev với mongrel - Max OSX 10.5.8, 2.66 Core2Duo, 4GB RAM
thử nghiệm App # 1 với 24 viên ngọc phụ thuộc nào

 
start boot.rb (Bundler.setup) - 2.0e-05 elapsed. Total=3.1e-05 
end boot.rb (Bundler.setup) - 2.352435 elapsed. Total=2.352915 
start app.rb - 0.084945 elapsed. Total=2.437866 
    start require rails/all - 0.000181 elapsed. Total=2.438049 
    end require rails/all - 0.489425 elapsed. Total=2.927485 
    start Bundler.require(:default, Rails.env) - 5.6e-05 elapsed. Total=2.927544 
    end Bundler.require(:default, Rails.env) - 5.16162 elapsed. Total=8.089177 
end app.rb - 0.025972 elapsed. Total=8.11516 
start env.rb - 0.084153 elapsed. Total=8.199329 
    # /railties-3.0.0.rc/lib/rails/initializable.rb 
    start run_initializers - 0.002709 elapsed. Total=8.202042 
    initialize_cache - 0.089231 elapsed. Total=8.518005 
    bootstrap_hook - 0.602342 elapsed. Total=9.192564 
    active_support.initialize_time_zone - 0.901676 elapsed. Total=10.10115 
    action_controller.set_configs - 0.375864 elapsed. Total=10.477565 
    will_paginate.active_record - 0.207447 elapsed. Total=10.694479 
    will_paginate.action_view - 1.041412 elapsed. Total=11.75974 
    load_init_rb - 0.051938 elapsed. Total=11.879547 
    load_init_rb - 0.082936 elapsed. Total=12.001311 
    load_init_rb - 0.18798 elapsed. Total=12.189555 
    load_config_initializers - 0.079461 elapsed. Total=12.269971 
    build_middleware_stack - 1.390042 elapsed. Total=13.729273 
    finisher_hook - 0.082274 elapsed. Total=13.811648 
    repopulate_roles - 0.350287 elapsed. Total=14.161941 
    end run_initializers - 3.0e-06 elapsed. Total=14.177869 
end env.rb - 0.000127 elapsed. Total=14.178002 

Dev với mongrel App Test # 2 với 2 phụ thuộc đá quý

 
start boot.rb (Bundler.setup) - Total=0 
end boot.rb (Bundler.setup) - 1.724158 elapsed. Total=1.724199 
start app.rb - 0.041006 elapsed. Total=1.765211 
    start require rails - 0.000151 elapsed. Total=1.765364 
    end require rails - 0.360051 elapsed. Total=2.125426 
    start Bundler.require(:default, Rails.env) - 5.5e-05 elapsed. Total=2.125485 
    end Bundler.require(:default, Rails.env) - 0.008396 elapsed. Total=2.133889 
end app.rb - 0.007805 elapsed. Total=2.141704 
start env.rb - 0.16541 elapsed. Total=2.307128 
    start run_initializers - 0.00031 elapsed. Total=2.307442 
    load_active_support - 0.24045 elapsed. Total=2.579421 
    active_support.initialize_time_zone - 0.206237 elapsed. Total=2.837663 
    action_controller.deprecated_routes - 0.210291 elapsed. Total=3.048634 
    build_middleware_stack - 0.220663 elapsed. Total=3.273035 
    end run_initializers - 3.0e-06 elapsed. Total=3.29339 
end env.rb - 8.7e-05 elapsed. Total=3.293483 
+0

Bạn rất chia sẻ kết quả thử nghiệm của mình. Tôi không chắc bạn đang sử dụng phiên bản Ruby nào, nhưng tôi đoán Ruby> = 1.9 sẽ tăng tốc độ một chút. –

+1

Tôi đang sử dụng Ruby 1.9.2. Hiệu suất là kết quả của việc tải đá quý và chỉ từ mô đun của khung đường ray. Bạn càng có nhiều sự phụ thuộc, bạn càng mất nhiều thời gian để khởi động ứng dụng của mình, điều này có ý nghĩa. Tôi nghi ngờ có nhiều đội ngũ cốt lõi có thể làm để tăng tốc độ này ... ít nhất là không phải trong ngắn hạn. – johnmcaliley

+0

Tôi tự hỏi tại sao Rails 2 không có cách tiếp cận kiểu mô-đun như vậy được khởi động nhanh hơn nhiều ... Vậy thì có lẽ câu hỏi nên là: tại sao phải mất quá lâu để bộ nạp tải tất cả các phụ thuộc? Liệu nó có giải quyết được những thứ đó hay nó chỉ tải chúng một cách mù quáng? Tôi đoán nếu chúng ta có thể vô hiệu hóa tất cả các thông minh-es của bó và 'chỉ tải' phụ thuộc nó sẽ tăng tốc độ lên ... –

Trả lời

2

Vì đây là câu hỏi khá cũ: Bạn đã thử nghiệm nó với phiên bản phát hành của R ails 3?

Đó là một thời gian dài nhưng cuối cùng vô nghĩa. Ứng dụng đường ray của tôi ở lại trong nhiều tháng tại một thời điểm để đó là một phần nhỏ của một phần nhỏ của 1 phần trăm của tổng thời gian chạy.

Bạn có nhiều phụ thuộc mà Bundler phải đối phó không? Tôi có thể nhận được ứng dụng Rails 3 của tôi bắt đầu trong chưa đầy 2 giây trong bất kỳ môi trường nào, nhưng tôi sử dụng rất ít đá quý bên thứ ba.

+0

Tôi đang sử dụng bản phát hành chính thức của Rails 3 bây giờ. Mặc dù tôi đã không chạy các điểm chuẩn một lần nữa, thời gian khởi động đã không được cải thiện đáng kể. Có, ứng dụng của tôi có rất nhiều phụ thuộc và bạn có thể thấy rằng ứng dụng Rails 3 trống khởi động trong khoảng 3 giây trên máy chủ của tôi trong các tiêu chuẩn. Đây là một sự khó chịu khi tôi cố gắng sử dụng Hành khách và chờ đợi các quá trình sinh sản. Tôi triển khai các thay đổi ít nhất một vài lần một tuần và với hàng trăm người dùng trên hệ thống của tôi, 30 giây chờ đợi hoặc thời gian chết là một vấn đề. Tôi chuyển sang Thin và sử dụng tính năng khởi động lại, vì vậy nó thực sự không phải là vấn đề sau đó. – johnmcaliley

+0

Ngoài ra, trên Hành khách 3 beta, đây không phải là vấn đề nữa với khởi động lại thời gian ngừng hoạt động bằng 0 thời gian và một kiến ​​trúc sinh sản mới. Vì vậy, bạn là đúng ... điều này cuối cùng là vô nghĩa, ngoài việc có thể thử nghiệm (nếu bạn không sử dụng một cái gì đó giống như spork). – johnmcaliley

+0

điều này vẫn còn đó .. nhưng vấn đề là trong phát triển cũng phải mất nhiều thời gian, đó là bực bội. – rtdp

2

Bundler thường dành hơn một nửa thời gian yêu cầu đá quý. Có bất kỳ phụ thuộc nào mà bạn đang tải không cần thiết trong chế độ dev/test không?Ví dụ, một số đá quý của tôi chỉ được sử dụng bởi công nhân resque hoặc trong các kịch bản khác. Bạn có thể thêm :require => false và sau đó yêu cầu chúng theo cách thủ công khi bạn cần chúng cho một số tốc độ khởi động khiêm tốn trong chế độ dev/test.

Trước khi làm như vậy, tôi thường cấu hình các câu lệnh yêu cầu (trong lib/bundler/runtime.rb) để xem chúng có thực sự đáng để lấy ra hay không.

+0

Tôi thực sự có nhiều đá quý trong dev/test .. mongrel, cuke, rspec, vv ;-) Tôi đồng ý rằng đây là một bài tập tốt, mặc dù. Nó chắc chắn có thể giúp bạn tiết kiệm một vài giây nếu bạn có một cái nhìn gần gũi và chắc chắn rằng bạn đang thực sự sử dụng tất cả mọi thứ trong gemfile. – johnmcaliley

0

Tôi có 3 đường ray 3 ứng dụng và tôi đang di chuyển một từ 2.3.8, đường ray trên 2.3.8 tải trong 4 giây và nhánh nằm trong đường ray 3 mất 12 giây, tất cả các thanh ray khác 3 dự án mất 20 đến 30 giây để tải, nó rất thất vọng khi tôi thấy một screencast nơi ai đó tải ứng dụng đường ray của mình trong 3 giây, tôi đã kéo tóc của tôi kể từ khi tôi di chuyển đến ray 3 nghĩ rằng đó là môi trường của tôi.

+0

có thể 3 giây nếu bạn không có phụ thuộc và bạn đang chạy trên phần cứng đỉnh cao. Tôi vẫn chưa thấy ít hơn 10 giây cho bất kỳ ứng dụng nào có chứa phụ thuộc. – johnmcaliley

Các vấn đề liên quan