Ruby on Rails에서 컨트롤러 작업을 프로파일 링하는 가장 좋은 방법은 무엇입니까? 현재 나는 병목 현상이 될 것이라고 생각하는 것 사이에 puts Time.now
번의 호출을 던지는 무차별 대항 (brute-force) 방법을 사용하고 있습니다. 그러나 그것은 정말로, 정말로 더럽다고 느낀다. 더 나은 방법이 있어야합니다.레일 컨트롤러 프로파일 작업
답변
벤치 마크 표준 라이브러리와 Rails에서 사용할 수있는 다양한 테스트 (유닛, 기능, 통합)를 사용하십시오. 다음 예는 다음과 같습니다
def test_do_something
elapsed_time = Benchmark.realtime do
100.downto(1) do |index|
# do something here
end
end
assert elapsed_time < SOME_LIMIT
end
을 그래서 여기에 우리가 벤치 마크 라이브러리를 통해 뭔가 100 번, 시간이 그것을 할, 그리고 시간의 SOME_LIMIT 금액에 미달했다 있는지 확인합니다.
Benchmark.realtime reference 및 Test::Unit reference과 같은 유용한 링크가 유용 할 수도 있습니다. 또한 '독서'작업을하는 경우 Agile Web Development with Rails의 예제 아이디어를 얻었는데, 이는 다양한 테스트 유형과 성능 테스트에 대해 모두 설명합니다. 정말 오히려 인상적으로,
. 면책 조항 : 나는 어떤 식 으로든 FiveRuns와 관련이 없으며 방금이 서비스를 시도했습니다.
TuneUp은 플러그인을 다운로드하는 무료 서비스로, 응용 프로그램을 실행할 때 화면 상단에 자세한 성능 메트릭을 표시 할 수있는 패널을 삽입합니다.
모델,보기 및 컨트롤러에 소요 된 시간의 비율을 보여주는 그래프를 포함하여 멋진 그래프를 제공합니다. 필요한 경우 ActiveRecord가 실행중인 개별 SQL 쿼리를 보면서 드릴 다운 할 수도 있으며 클릭 한 번으로 기본 데이터베이스 스키마를 보여줄 수도 있습니다.
마지막으로 선택적으로 커뮤니티 성능 분석 및 조언을 위해 프로파일 링 데이터를 FiveRuns 사이트에 업로드 할 수 있습니다.
나는이 기술을 오래 동안 집어 들었고 아주 편리하다고 생각했다.
제자리에 있으면 컨트롤러에 닿는 모든 URL에 ?profile=true
을 추가 할 수 있습니다. 당신의 행동은 평소대로 돌아가지만, 렌더링 된 페이지를 브라우저에 전달하는 대신에, 당신의 행동이 그 시간을 보낸 곳을 보여주는 멋지게 형식화 된 루비 프로필 페이지를 보낼 것입니다.
첫째, 아마도 개발 그룹에, 당신의 Gemfile에 루비 교수를 추가
이group :development do
gem "ruby-prof"
end
이 그런 다음와 ApplicationController에 around filter을 추가
around_filter :profile if Rails.env == 'development'
def profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
else
yield
end
end
루비 - 교수 출력을 읽는 것은입니다 조금은 예술이지만, 나는 그것을 운동으로 남겨 둘 것입니다.ScottJShea에 의해
추가 참고 : 당신이 측정 유형 곳이 변경하려면 : 응용 프로그램 컨트롤러의 프로필 방법에
RubyProf.measure_mode = RubyProf::GC_TIME #example
if
전합니다. 사용 가능한 측정 값 목록은 ruby-prof page에서 확인할 수 있습니다. 이 글을 쓰는 시점에서 memory
및 allocations
데이터 스트림이 손상된 것 같습니다 (see defect).
이 작업을 수행하는 사람은 ApplicationController 상단에 "require 'ruby-prof'를 추가해야합니다. 또한 나를 위해 "self.response_body ="를 "self.response.body ="(Rails 2.3.14)로 변경해야했습니다. – Pavling
개조 해 주셔서 감사합니다. 'response_body'는 Rails 3.0에 추가되었습니다. 그리고 만약 당신이 bundler를 사용한다면, 당신은 루비 - 교수를 요구할 필요는 없지만,이 기술은 이전 버전의 레일스에 꽤 적응할 수있어서 기쁩니다. –
팁 주셔서 감사합니다. 또한 레일 2.3.14를 사용하고 있으며이 문제를 해결하는 데 어려움을 겪고 있습니다. graph_html_printer.rb : 98 :'full_name '에, 내가 설치 한 루비 - 프로의 버전이 무엇이든 상관없이, "잘못된 인자 (0을위한 1)"를 얻습니다. 어떤 아이디어가 그 원인 일 수 있습니까? – jsarma
이 레일 4.2.6에서 작동 :
o=OpenStruct.new(logger: Rails.logger)
o.extend ActiveSupport::Benchmarkable
o.benchmark 'name' do
# ... your code ...
end
- 1. 레일 컨트롤러
- 2. 레일 컨트롤러
- 3. 레일 컨트롤러
- 4. 셀러리 작업 프로파일 링
- 5. 레일 상태의 백그라운드 작업
- 6. 스위칭 레일 컨트롤러
- 7. 레일 3 컨트롤러 테스트
- 8. 보고서 컨트롤러 설계 레일
- 9. 레일 3 컨트롤러 방법은
- 10. 레일 STI 컨트롤러
- 11. 컨트롤러 설계 (레일 3)
- 12. 전화 레일 컨트롤러
- 13. 레일 다른 컨트롤러
- 14. 온라인 신문의 레일 디자인 - 컨트롤러
- 15. 비 CRUD 컨트롤러 작업
- 16. MVC 컨트롤러 작업?
- 17. 레일 : 컨트롤러 이름이 컨트롤러 이름 인
- 18. 레일 3/컨트롤러/플래시 해시
- 19. 레일 - 컨트롤러 이름 지정 질문
- 20. 변수 통과 레일 테스트 컨트롤러
- 21. 컨트롤러 기능 쿼리의 레일 라우팅
- 22. 왜이 레일 컨트롤러 테스트가 실패합니까?
- 23. 레일 모델 컨트롤러 모범 사례
- 24. 레일 네임 스페이스 컨트롤러 문제
- 25. 레일 배경 작업 처리
- 26. 작업 당 레일 레이아웃?
- 27. 레일 유증이 지연 작업
- 28. 레일 스크랩 레이크 작업
- 29. 제어 컨트롤러 작업 호출 순서
- 30. asp.net mvc 컨트롤러 작업 테스트
이 답변이 당신의 작업을 신속하게 실행되고 있는지 확인하는 방법을 알려줍니다. 프로파일 링을 사용하면 어떤 부분이 가장 많은 시간을 소비하는지 알아내는 데 도움이되지 않습니다. –