我想提高应用的性能,并开始阅读http://guides.rubyonrails.org/performance_testing.html。我的问题在这个“我如何开始”的演讲结束时。
所以我用
开始了class BrowsingTest < ActionDispatch::PerformanceTest
self.profile_options = { :runs => 5, :metrics => [:wall_time, :process_time],
:output => 'tmp/performance', :formats => [:flat] }
def test_homepage
get '/'
end
end
的输出
bundle exec rake test:profile
终端中的是
BrowsingTest#test_homepage (909 ms warmup)
wall_time: 341 ms
process_time: 517 ms
并在process_time平面文件中,它就像那样开始
Thread ID: 70299857145540
Total: 2.589931
%self total self wait child calls name
12.45 0.32 0.32 0.00 0.00 110 BasicObject#method_missing
10.59 0.28 0.27 0.00 0.01 415 Kernel#raise
7.79 0.20 0.20 0.00 0.00 1350 <Class::Dir>#[]
不知道该怎么做,我开始寻找使用method_missing的东西。我发现我用来转换指标(Alchemist)的lib就是这样做的,它包含在Numeric类中。
由于主页并不真的需要,我只是删除了lib并重新运行了性能分析测试。 这次我得到以下
BrowsingTest#test_homepage (856 ms warmup)
wall_time: 321 ms
process_time: 482 ms
平面文件不再有method_missing
Thread ID: 70185893711560
Total: 2.420023
%self total self wait child calls name
12.05 0.29 0.29 0.00 0.00 5 ActionView::Base#helpers
8.32 0.20 0.20 0.00 0.00 1350 <Class::Dir>#[]
5.12 0.12 0.12 0.00 0.00 5925 String#gsub
我第二次跑了,得到了
BrowsingTest#test_homepage (856 ms warmup)
wall_time: 321 ms
process_time: 482 ms
Thread ID: 70231460630220
Total: 2.411142
%self total self wait child calls name
14.18 1.49 0.34 0.00 1.16 3265 Array#each
8.26 0.20 0.20 0.00 0.00 1350 <Class::Dir>#[]
4.94 0.12 0.12 0.00 0.00 205 Kernel#caller
因此,似乎不使用该库可节省约35毫秒的处理时间,这似乎与平面文件所说的非常一致。我想我应该尝试对此做些什么,特别是因为它似乎经常因为包含Numeric而被调用。
现在我的问题是:
谢谢!
答案 0 :(得分:1)
我真的不觉得这些页面性能基准测试是必要的。我发现尽早部署并包含某种形式的应用程序监控(如新版本的RPM)非常重要。您可以通过它识别应用程序的所有瓶颈,并在应用程序增长时随着时间的推移进行修复。
答案 1 :(得分:1)
我喜欢你熟悉这些工具以及如何阅读结果。 New Relic是监控这些东西的好工具,但是如果你不想长期支付新的遗物,那么request_log_analyzer也是如此。
监控非常重要,因此您可以了解问题何时出现
-John McCaffrey