2012-11-19 11 views
7

Próbuję uruchomić zbieranie śmieci poza pasmem (gdy żądanie zakończyło podawanie odpowiedzi) w mojej aplikacji Ruby on Rails. I dodaje następujące do mojego config.ru:Kończy się zbieranie śmieci z zespołu przy pomocy Unicorn + Rack

# 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 

Patrzę na mojego NewRelic portalu jednak i większość transakcji internetowych wskazują, że co najmniej 110-150ms spędza średnio robi zbierania śmieci. Czy Unicorn :: OoobGC powinien zrobić to poza zasięgiem rzeczywistej prośby? Jeśli tak, dlaczego pojawia się w transakcji internetowej? W jaki sposób mogę wydłużyć czas spędzany na zbieranie śmieci poza kontekstem żądania internetowego, aby postrzegane czasy reakcji klientów były szybsze? Wydany czas procesora będzie nadal taki sam, ponieważ musi się odbywać w tle, ale lepiej w tle niż podtrzymywanie potoku żądania.

Odpowiedz

2

Jeśli jedno żądanie przydzieli wystarczającą ilość obiektów do wyzwolenia GC, nadal będzie wyświetlany czas Gc dla żądania pomimo przeniesienia końcowego OWC z oprogramowaniem pośredniczącym jednorożca.

Dzięki rubinowi 1.9.3 i REE można pokręcać różnymi pokrętłami GC, aby kontrolować, jak często gc zostaje wyzwolony. Zobacz Tuning the GC in Ruby 1.9.3, aby zapoznać się z przykładami dotyczącymi ustawiania RUBY_HEAP_MIN_SLOTS, RUBY_GC_MALLOC_LIMIT i RUBY_FREE_MIN dla lepszego zachowania w długich aplikacjach usługowych.

Powiązane problemy