2012-06-15 10 views
11

Obsługuję oprogramowanie przy użyciu pasażera. Tworzy wiele procesów ruby.Używanie boga tylko do zabicia

Czasami jeden z tych rubinów jest nadęty i chcę, aby umarł.

Miałem nadzieję, że wykorzystam boga do tego zamiaru. Moim pomysłem było monitorowanie wszystkich tych rubinów i jeśli zużywa on ponad 500 MB pamięci na 3 cykle, bóg powinien starać się z wdziękiem je zabić. Jeśli pozostanie przy życiu przez więcej niż 5 minut, to Bóg powinien go zabić nie z wdziękiem.

Wydaje mi się, że Bóg zawsze próbuje ponownie uruchomić usługę, więc zmusza nas do wydania polecenia uruchomienia. Czy możliwe jest użycie boga tylko po to, by zabijać złe behawioralne procesy i pozwolić spawnerowi pasażerów, aby przywrócił je do życia w razie potrzeby?

Odpowiedz

4

Odpowiedź na pytanie jest kwestią samą w sobie. możesz zabijać procesy ruby ​​za pomocą god gem, która jest strukturą monitorującą proces procesu ruby ​​autorstwa facetów github.

zasadzie, oto jak to działa: bóg

  1. configure monitorować proces może być coś z apache, pasażer, kundla czy tylko zwykły plik robi długo uruchomione zadanie.
  2. Ustaw warunkowe w pliku konfiguracyjnym boga, na podstawie którego bóg wykona jakiś predefiniowany kod.

Oto prosty przykład (zaczerpnięty z docs). uznać to za plik długi uruchomionego procesu, który działa undefiantly który chcemy monitorować zużycie pamięci, pozwala nazwać simple.rb

loop do 
    puts 'Hello' 
    sleep 1 
end 

teraz, zainstalować god gem & skonfigurować go jako uruchomić jako administrator, więc można go zabić/odradzać procesy i następnie utworzyć plik konfiguracyjny. Przykład (również zaczerpnięte z docs):

God.watch do |w| 
    w.name = "simple" 
    w.start = "ruby /full/path/to/simple.rb" 
    w.keepalive(:memory_max => 500.megabytes) 
end 

Oto, jak może masz pomysł, jeśli zużycie pamięci proces przekroczy 500 megabajtów, Bóg go ponownie. Oto kilka zasobów, które mogą pomóc, jeśli zaczynasz z zarządzania procesami za pomocą god GEM:

teraz proszę pamiętać WSZYSTKIE con figuracja dla god jest w rzeczywistości legalnym kodem ruby, dzięki czemu można uzyskać kreatywną & robić różne rzeczy.

wreszcie, jeśli często znalezienie się uruchomiony proces długi bieg, radzę ci spróbować JRuby który działa znacznie lepiej z długimi procesami biegnącą do JVM & wiele szybciej niż MRI

2

używam tej samej konfiguracji na wiele moich projektów i miał te same problemy z wyciekiem pamięci.Po obejrzeniu monitoringu zdecydowaliśmy się użyć funkcji pasażera, aby go rozwiązać. W szczególności umożliwia ustawienie (np.) PassengerMaxRequests 300, które zamyka dowolne wystąpienie, gdy obsłużyło tę liczbę żądań.

Jeśli go używasz, upewnij się, że PassengerMinInstances jest ustawione na 0, ponieważ poprzedza ustawienie dla żądań maksymalnych.

Powiązane problemy