2015-08-07 2 views
0

Я не могу понять, как профилировать приложение JRuby On Rails в Tomcat. На самом деле, я не знаю, как передать --profile вариант JRuby, когда код ruby ​​запускался не командой jruby, а с java.Как передать JRUBY_OPTS в JRuby войну/банку, упакованную с Warbler?

Чтобы исследовать вопрос, который я создал файл:

$ cat bin/profile_puts.rb 

require 'yaml' 
puts ENV['JRUBY_OPTS'] 

require 'jruby/profiler' 
def profile(&block) 
    JRuby::Profiler::GraphProfilePrinter.new(JRuby::Profiler.profile(&block)).printProfile(STDOUT) 
end 
profile do 
    puts "hi" 
end 

выбежала

$ jruby --profile.api bin/profile_puts.rb 

И получил правильный вывод профилировщика.

Тогда я упаковываю его с камышевкой и побежал

$ gem install warbler 
$ warble jar  
$ JRUBY_OPTS=--profile.api java -jar profile.jar JarMain 

И получил ошибку:

--profile.api 
RuntimeError: Profiling not enabled in runtime 

Как вы можете видеть, переменная JRUBY_OPTS среды попала в процесс, но не имел никакого влияния на JRuby ,

Как это можно решить?

ответ

1
java -Djruby.cli.profiling.mode=API -jar profile.jar 

Я должен уточнить это, JRUBY_OPTS либо обработаны сценарием JRuby оболочки или с помощью CLI, когда не используя камышевки ни доступен, так что вы должны искать соответствующее имущество и передать его, как это. Один из них позволяет профилировать API.

С JRuby --properties

# Enable instrumented profiling modes. 
# Options: [OFF, API, FLAT, GRAPH, HTML, JSON, SERVICE], Default: OFF. 

#cli.profiling.mode=OFF 
Смежные вопросы