2013-03-04 12 views
7

Opracowałem aplikację dla klienta, która używa Play Framework 1.x i działa na GAE. Aplikacja działa świetnie, ale czasami jest szalona wolno. Załadowanie prostej strony zajmuje około 30 sekund, ale czasami działa szybciej - bez zmiany kodu.Dowiedz się, dlaczego mechanizm aplikacji Google jest powolny.

Czy istnieje sposób na określenie, dlaczego działa wolno? Próbowałem skontaktować się z pomocą techniczną, ale nie mogłem znaleźć żadnego numeru telefonu ani adresu e-mail. Również nie ma odpowiedzi na oficjalną grupę google.

Jak podszedłbyś do tego problemu? Obecnie mój klient jest bardzo zły z powodu wolnego czasu ładowania, ale przejście na innego dostawcę jest w tej chwili ostatnią opcją.

+0

Czy używasz produktu nadrzędnego/podrzędnego lub wysokiej repliki dla magazynu danych? –

+0

Witam, używam wysokiej replikacji – FrEaKmAn

+0

zastanawiasz się - czy monitorujesz obciążenie strony/GC/czas twojego kodu - jeśli tak, to w jaki sposób? –

Odpowiedz

0

Czy to płatna aplikacja? Kiedy nie płacisz za aplikację, instancje mają bardzo krótki czas życia.

+1

Jest to płatna aplikacja. Rozumiem powolny start, to normalne. Mówię o tym, kiedy aplikacja jest już uruchomiona. – FrEaKmAn

+0

co oznacza, że ​​druga prośba po wystąpieniu instancji jest już załadowana? Ile instancji jest w tej chwili? tylko jeden, czy jest ich więcej? a także sprawdź, ile instancji masz min bezczynności. –

+0

Ustawiłem wszystko na automatyczne i pozwól Google decydować, co jest najlepsze. Kilka razy sprawdzałem i działało 4 wystąpienia. – FrEaKmAn

8

Użyj profilu GAE Appstats, aby profilować swoje zdalne wywołania procedur. Wszystkie RPC są powolne (Google Cloud Storage, Google Cloud SQL, ...), więc jeśli możesz zmniejszyć liczbę wywołań RPC lub użyć niektórych pamięciowych struktur danych, użyj ich -> Twoja aplikacja będzie znacznie szybsza. Ale dzięki appstats możesz zobaczyć, które części są wolne i czy wymagają uwagi :).

Na przykład utworzyłem pamięć podręczną Google Cloud Storage dla mojej aplikacji i skróciłem czas jej realizacji z 2 minut do poniżej 30 sekund. RPC są wąskim gardłem w GAE.

0

Wykonując co najmniej jedną instancję na stałe, uzyskujesz dużą poprawę w pierwszym użyciu. Zajmuje to około 15 sekund. załadować aplikację na przykład, dlatego wystąpić długie czasy żądania, gdy nikt nie został za pomocą aplikacji na chwilę

+1

Jestem świadomy czasu uruchamiania. Jak już powiedziałem, działa wolno w losowych odstępach czasu. – FrEaKmAn

+0

Jesteś pewien, że nie dzieje się tak dlatego, że uruchamia się nowa instancja. W zależności od ustawień aplikacji w konsoli GAE możesz w rzeczywistości wpłynąć negatywnie na aplikację, w zależności od ustawień. Było kilka rozmów na ten temat i artykułów, ale nie mogę ich znaleźć od razu. Możesz także użyć żądania rozgrzewki. – therewillbesnacks

2

Łącząc kilka odpowiedzi i dodać kilka rzeczy do sprawdzenia:

  1. Debug za pomocą statystyk aplikacji. Poszukaj sytuacji "klatek schodowych" i wywołań RPC. Może coś w twojej aplikacji wywołuje wywołania RPC w pewnych punktach, które nie zdarzają się w Twojej logice przez cały czas.

  2. Dostosuj ustawienia instancji. Dodaj kilka stałych/rezydentnych instancji i zobacz, czy to ma znaczenie. Jeśli kręcisz nowe instancje, rzeczy będą powolne, prawdopodobnie przez okres czasu (30 sekund lub więcej), który opisujesz. Wydaje się przypadkowe. Nie chodzi tylko o liczbę instancji, ale o kombinacje suwaków, z których korzystasz (możesz zaszkodzić sobie zbyt mało/wiele).

  3. Sprawdź samą aplikację. Czy robisz dużo alokacji pamięci w JVM? Przydzielanie/zwalnianie pamięci jest z natury powolną operacją i może powodować zawieszenie. Czy na pewno twoje zamrożenie nie jest problemem JVM? Spróbuj replikować problem lokalnie i dostosuj ustawienia XMX i Xms JVM i zobacz, czy znajdziesz podobne zachowanie. Również profiluj swoją aplikację lokalnie w poszukiwaniu problemów związanych z pamięcią/wydajnością. Możesz zmniejszyć alokacje przy użyciu pulowania, kontenerów DI itp.

  4. Czy prowadzisz jakiekolwiek zadania/przetwarzanie cron na serwerach front-end? Postaraj się przenieść jak najwięcej do zadań w tle, takich jak wysyłanie wiadomości e-mail. Przerwy mogą wydawać się przypadkowe, ale może to być wynikiem zdarzeń mających miejsce w zależności od ustawień pracy. 9 rano każdego dnia może nie oznaczać tego, co myślisz, w zależności od opcji crona/zadania. Następstwo - przenieś rzeczy na serwery zaplecza i przeciągnij kolejki.

Trudno jest podać dobrą odpowiedź bez dodatkowych informacji. Najlepszą osobą, jaką tutaj można zrobić, jest dać ci punkt wyjścia, którego prawie każda tutaj odpowiedź już istnieje.

1

Google zazwyczaj nie zapewnia wsparcia kontaktowego w przypadku wielu usług. Opisany problem dotyczący powolności silnika aplikacji Google jest prawdopodobnie spowodowany zimnym startem. Mechanizmy wyszukiwania w aplikacjach wyszukiwarki Google śpią po około 15 minutach. Możesz napisać zadanie cron do pingów co 14 minut, aby utrzymać węzły w górze.

Powiązane problemy