7

Ruby on Rails 애플리케이션에서 대역 외 (가비지 수집이 응답 완료 후) 대역 외에서 가비지 수집을 실행하려고합니다. 나는 그러나 내 NewRelic 포털에서 찾고 있어요, 그리고 대부분의 웹 트랜잭션이 적어도 110-150ms 평균하고 가비지 수집에 소요되었음을 나타냅니다 않는유니콘 + 랙으로 대역 외 가비지 수집이 실행 중입니다.

# This file is used by Rack-based servers to start the application. 
require ::File.expand_path('../config/environment', __FILE__) 
begin 
    require 'unicorn/oob_gc' 
rescue LoadError, NameError 
end 
# Out-of-band GC, runs GC after every 10th request and after the response 
# has been delivered. 
begin 
    use Unicorn::OobGC, interval=10 
rescue NameError 
end 

run MyApp::Application 

GC.start 

: 나는 내 config.ru에 다음을 추가했다. Unicorn :: OoobGC가 실제 요구 범위를 벗어나기로되어 있습니까? 그렇다면 왜 웹 트랜잭션에이 메시지가 표시됩니까? 가비지 수집에 소요되는 시간을 웹 요청 컨텍스트 외부에서 처리하여 클라이언트 응답 시간이 더 빨리 감지되도록하려면 어떻게합니까? 소요 된 CPU 시간은 요청 파이프 라인을 유지하는 것보다 백그라운드에서 발생해야하기 때문에 여전히 동일합니다.

답변

2

단일 요청에서 GC를 트리거하는 데 충분한 개체를 할당하는 경우 최종 GC OOB를 유니콘 미들웨어로 이동 했음에도 불구하고 요청에 대해보고 된 gc 시간이 표시됩니다.

루비 1.9.3 및 REE를 사용하면 GC가 트리거되는 빈도를 제어하는 ​​데 도움이되는 다양한 GC 손잡이를 돌릴 수 있습니다. 장시간 실행되는 서비스 응용 프로그램에서 더 나은 동작을 위해 RUBY_HEAP_MIN_SLOTS, RUBY_GC_MALLOC_LIMIT 및 RUBY_FREE_MIN을 설정하는 예제는 Tuning the GC in Ruby 1.9.3을 참조하십시오.

관련 문제