2012-11-13 15 views
7

Mamy dużą aplikację szyny i od kilku dni, jeden po drugim, nasz proces ruby ​​wydaje się blokować w pętli i jeść 100% procesora aż pasażer erozja serwera podnoszącego 502.Sposoby zrozumienia, dlaczego blok procesu ruby ​​na 100% CPU

Czy znasz najlepsze sposoby, aby dowiedzieć się, dlaczego?

Próbowałem New Relic, ale to tylko rzeczy wydajnościowe, a nasze błędy są zbyt liczne, aby spróbować odgadnąć, jaki jest problem. (Mamy dużo życzenie dzień i dużo błędów UTF-8 BSON ponieważ używamy UTF-8 URL)

Zastosowanie:

  • Rails 3.2.6 z Ruby 1.9.2p290
  • pasażer 3.0.13
  • MongoDB 2.0.1 z Mongoid 2.4.11
  • Nginx
  • FreeBSD 8,2

Odpowiedz

8

Poręcznym sposobem sprawdzenia, gdzie znajduje się rubin, jest dołączenie gdb do uruchomionego procesu i call rb_backtrace(). To spowoduje wydrukowanie bieżącego śladu stosu na stderr, który prawdopodobnie zostanie skierowany do pliku dziennika. Oto short walk through znaleziony na blogu. Śledzenie stosu powinno pomóc ci zlokalizować miejsce, w którym utknął proces, i pozwolić ci dowiedzieć się, co dzieje się za pomocą inspekcji kodu lub dodając oprzyrządowanie do rejestrowania wokół krytycznej ścieżki kodu.

Aman Gupta ma bibliotekę gdb do biblioteki rubinów gdb.rb Znalazłem czasem przydatny.

+0

Wahoo, dokładnie to, czego szukałem, dzięki! – Hartator

Powiązane problemy