2014-04-01 19 views
6

Mam problemy z moją aplikacją Playframework, która nie reaguje od czasu do czasu i chciałbym to wykryć w czasie wykonywania + w dzienniku na temat aktualnie uruchomionego kontekstu wykonania.Jak wykryć egzekucję scalacontextextext?

Jaka byłaby najlepsza strategia wdrożenia? Myślałem o umieszczeniu małych runneli w kontekstach wykonawczych i jeśli nie zostaną one wykonane na czas, będę rejestrował ostrzeżenie. Ten maksymalny czas oczekiwania powinien oczywiście być konfigurowalny. Np. Główny kontekst wykonania WWW nie powinien nigdy być blokowany przez więcej niż 1 sekundę, ale kontekst wykonawczy db tła może pozwolić na 30 sekund blokowania.

Ktoś musiał to wcześniej zrobić?

Podobne Info: http://www.playframework.com/documentation/2.2.x/ThreadPools

+0

Czy chcesz wykryć, czy procesor/pamięć są używane w jego granicach? – Augusto

+0

Czy nowy relikt jest dla ciebie możliwą opcją? –

+0

To nie ma nic wspólnego z os/cpu/memory, chodzi o ustawienie poprawnych kontekstów wykonania akka i posiadanie narzędzi, które pomagają wykryć pogorszenie wydajności z powodu użycia niewłaściwych kontekstów wykonania w kodzie. – Somatik

Odpowiedz

2

To jest bardzo trudne pytanie.

Konfiguracja dyspozytorów naprawdę zależy od rodzaju pracy wykonywanej przez aktorów.

Prawdopodobnie powinieneś spojrzeć na aktorów, którzy spawnują przyszłość, aby wykonać swoją pracę. To może być dobry pomysł, aby wstępnie zdefiniować kontekst wykonania w pliku konfiguracyjnym i wykorzystywać je tak:

implicit val ec : ExecutionContext = context.system.dispatchers.lookup("someDispatcher")

te podmioty mogą powodować efekt głodu.

Efekt, który chcesz osiągnąć, to sprawić, że wiadomości są przetwarzane szybko, a długotrwałe zadanie nie ma na nie wpływu, dlatego kluczową sprawą jest separacja.

Dobre narzędzie do monitorowania aplikacji to Typesafe Console. Możesz zobaczyć tam dyspozytora i zobaczyć, że opóźnienie w obsłudze wiadomości wzrasta.

Inną kwestią jest identyfikacja aktorów, którzy pracują z dużym ryzykiem, takich jak operacje we/wy sieci. Jeśli coś stanie się z tworzeniem nici, nie będzie ponownie dostępne w puli, spowoduje to problemy.

Jest bardzo prawdopodobne, że bez eksperymentów z rozmiarem wątku nie będziesz wiedział, jakie jest najlepsze ustawienie dla ciebie.

Większość tych porad, które napisałem, wiem z książki Effective Akka by Jamie Allen i wydaje się, że działają całkiem dobrze dla mnie. W tej książce znajduje się sekcja Fixing Starvation. Możesz przyjrzeć się temu bliżej.

+0

dziękuję za odpowiedź, ale załóżmy, że masz stażystę pracującego nad projektem, a on nie wie o regułach tego, co można uruchomić na jakim dyżurującym. Może umieścić operację długiego blokowania w systemie rozsyłającym strony internetowe. Chciałbym, żeby system powiedział mu, że to robi/coś nie tak ... – Somatik

+1

Wierzę, że osiągnięcie tego automatycznie byłoby dość trudne do zdobycia. Szczerze mówiąc, nie mam dobrego pomysłu, jak pomóc "biednemu" stażystowi. – almendar

+0

Coś, co możesz wziąć pod uwagę, to dodawanie stosu cech do aktora za pomocą okresowych danych np. liczba przetworzonych wiadomości i czas spędzony w bloku odbioru. Następnie zebrać je i poddać analizie. – almendar