Как профилировать задачу Rake?
Мне нужно профилировать грабли. Потому что я нуб, я знаю только, как профилировать.rb код, как это: ruby -Ilib -S ruby-prof -p graph_html profile.rb > profile.html
Но как мне профилировать конкретную задачу Rake?
3 ответа
Rake - это всего лишь скрипт Ruby, поэтому вы можете просто вызывать ruby-prof для rake, точно так же, как вы профилируете любой другой скрипт.
Учитывая ваш вызов ruby-prof, попробуйте:
ruby -Ilib -S ruby-prof -p graph_html `which rake` TASK > profile.html
Я только что использовал следующую командную строку:
ruby-prof -p graph_html /usr/local/bin/rake19 import_from_aws file=~/sourcedata batch=test1 > /tmp/profile.html
Для профилирования вызова:
rake19 import_from_aws file=~/sourcedata batch=test1
Если вы хотите "грубое" профилирование и хотите выяснить, какое задание является узким местом, я предлагаю отсюда отличный код Майка Уильяма. Это работало прекрасно, когда я профилировал свои задачи Rake.
module Rake
class Task
def execute_with_timestamps(*args)
start = Time.now
execute_without_timestamps(*args)
execution_time_in_seconds = Time.now - start
printf("** %s took %.1f seconds\n", name, execution_time_in_seconds)
end
alias :execute_without_timestamps :execute
alias :execute :execute_with_timestamps
end
end
Я думаю, что стоит упомянуть, что вы можете профилировать его, используя bundle, а не rake напрямую, если вы пользуетесь bundler.
ruby-prof -p graph_html `which bundle` -- 'exec' 'rake' '-T' > profile.html