Профилирование рельсов приложения JRUBY выводит <unknown>элементов - PullRequest
4 голосов
/ 06 февраля 2012

Среда: Linux Mint 32 bit, JRuby-1.6.5 [i386], Rails 3.1.3.

Я пытаюсь профилировать приложение rails, развернутое на JRuby 1.6.5 на WEBrick (в режиме разработки).

Мой JRUBY_OPTS: "-Xlaunch.inproc = false --profile.flat"

В одной из моих моделей я ввел явный режим сна (5) и убедился, что этот метод вызывается как часть ловушки before_save при сохранении модели. Псевдокод ...

class Invoice < ActiveRecord::Base
 <some properties here...>

 before_save :delay

 private
 def delay
  sleep(5)
 end
end

Приведенный выше код гарантирует, что непосредственно перед сохранением экземпляра счета-фактуры автоматически вызывается метод delay .

Теперь, когда я профилирую код, который создает этот экземпляр модели (с помощью модульного теста rspec), я получаю следующий вывод:

6.31        0.00        6.31          14  RSpec::Core::ExampleGroup.run
6.30        0.00        6.30          14  RSpec::Core::ExampleGroup.run_examples
6.30        0.00        6.30           1  RSpec::Core::Example#run
6.30        0.00        6.30           1  RSpec::Core::Example#with_around_hooks
5.58        0.00        5.58           1  <unknown>
5.43        0.00        5.43           2  Rails::Application::RoutesReloader#reload!
5.00        0.00        5.00           1  <unknown>
5.00        5.00        0.00           1  Kernel#sleep
4.87        0.00        4.87          40  ActiveSupport.execute_hook
4.39        0.00        4.39           3  ActionDispatch::Routing::RouteSet#eval_block
4.38        0.00        4.38           2  Rails::Application::RoutesReloader#load_paths

В приведенном выше выводе, почему я вижу эти два элемента вместо Invoice.delay или что-то подобное.

Фактически, когда я запускаю свой сервер rails (WEBrick) с тем же JRUBY_OPTS (упомянутым выше), все фреймы кода моего приложения отображаются как неизвестные элементов в выходных данных профилировщика!

Я что-то не так делаю?

1 Ответ

2 голосов
/ 27 августа 2014

Похоже, вы максимальный предел методов профиля Set -Xprofile.max.methods JRUBY_OPTS на большое число (по умолчанию 100000 и никогда не достаточно). Например.

export JRUBY_OPTS="--profile.flat -Xprofile.max.methods=10000000"
...