Используйте профиль Ruby для отслеживания медленного выполнения в RSpec - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть куча тестов rspec, которые выполняются слишком долго. Я пытаюсь выяснить, где узкое место и логическое место для начала использования стандартной библиотеки профилей библиотеки. Выполнение происходит с JRuby 1.5.2 в этом конкретном случае. Вот вывод после встраивания библиотеки профилей в мою спецификацию:

 %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
  0.37     0.37      0.37       69     5.33     5.33  #<Class:#<Object:0x99b2a1d>>#include
  0.01     0.38      0.01      208     0.06     0.06  String#fast_xs
  0.00    98.99      0.00        1     0.00 98987.00  #toplevel

Мне нужно выяснить, почему 208 вызовов поступают в String # fast_xs, но реальный вопрос здесь заключается в том, что именно происходит в #toplevel? Существует задержка в 98987,00 мс, потраченная на что-то там, и мне нужен более детальный способ просмотра разбивки, чтобы понять, что я могу изменить в своих тестах спецификаций, чтобы ускорить процесс.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2010

Есть так много вопросов, как это.Отображается вывод некоторых профилей и вопрос: «Что происходит?»

Нет необходимости ломать голову над выводом профиля.Вы можете сразу найти проблему (и) .Чем больше времени они занимают, тем легче их найти.

Все, что касается времени, мс на вызов, подсчета вызовов и т. Д., Застревает в яме мифов о производительности .

Добавлено: Например,

  • собственное время (исключительное) основано на предпосылке, что единственный способ тратить время - это не вызывать функции.Когда функции вызываются без необходимости, которые вы хотите найти и от которых избавляетесь, или если ввод-вывод выполняется без необходимости, он не появляется во времени.IO и другое время блокировки вообще не отображаются, если выборки берутся только тогда, когда программа разблокирована.

  • мс на вызов (включительно), умноженная на количество вызововФункция, деленная на общее время, дает долю времени, за которую отвечает функция.Имея только два из этих трех чисел, вы не можете определить, тратит ли функция слишком много времени или нет.

  • Если вы можете сказать, отвечает ли функция за значительную долю времениВам все еще нужно найти строки в нем, которые отвечают за время.Если профилировщик действует как единственное, что вас волнует, так это функции, вы все равно останетесь заниматься детективной работой.

0 голосов
/ 16 сентября 2010

есть драгоценный камень jruby-prof, который может вам помочь.Рубин-проф драгоценный камень для МРТ также может помочь превосходно.

0 голосов
/ 15 сентября 2010

Сколько тестов у вас есть?Каждый тест RSpec перезагружает всю среду Rails, поэтому, если у вас есть тонны тестов, это скорее всего приведет к дополнительным издержкам.Вы можете взглянуть на сервер тестирования Spork , который загружает только среду один раз при запуске ваших тестов.* используя Spork, если вы проводите много тестов и сталкиваетесь с проблемами с медленными тестами.

...