2014-05-21 17 views
6

Mam aplikację App Engine Java, która działa na automatycznie skalowanych instancjach F1 (600 Mhz, 128 MB RAM). Po rozgrzewce zużycie pamięci na instancję według tablicy kontrolnej wynosi około 220 MB. Zgodnie z docs, obejmuje to "obciążenie runtime".Jak analizować faktyczne wykorzystanie pamięci w Java Engine App Engine?

  • Czy mam prawo zakładać, że liczba ta odzwierciedla maksymalny rozmiar permen i sterty, ale niekoniecznie faktycznie wykorzystany? Nigdy nie otrzymałem błędu braku pamięci.
  • Jaki jest najlepszy sposób analizy użycia pamięci w środowisku produkcyjnym? Czy istnieje sposób na wykonanie zrzutu sterty pomimo ograniczeń środowiska wykonawczego App Engine?

Analiza lokalna za pomocą np. VisualVM nie zapewnia dokładnego obrazu, ponieważ zawiera serwer programistyczny, wersje pamięci Datastore i Memcache w pamięci itd. Łącznie dodaje do 8000 załadowanych klas (w tym serwer dev, moje własne klasy i około 85 bibliotek), wynikający z tego permgen o wielkości 50 MB, a minimalny rozmiar sterty to 50 MB po pełnym zbiorze śmieci.

Niektóre informacje na moim pytanie: Czasami programista (często podczas pierwszych kilku żądań po zakończeniu zwykłego zadania synchronizacji) uruchamia nowe wystąpienie w celu przetworzenia obciążenia żądania, które jest zwykle obsługiwane przez tylko jedną instancję. Po kilku kolejnych żądaniach wszystkie żądania będą ponownie kierowane całkowicie i spójnie do pierwszej instancji. Na podstawie zestawu reguł programu planującego przedstawionych na here próbuję ustalić, czy to zachowanie może wynikać z harmonogramu przewidującego (tymczasowy) brak pamięci instancji do przetwarzania dodatkowych żądań.

Odpowiedz

0

Jaki jest najlepszy sposób analizy użycia pamięci w środowisku produkcyjnym? Czy istnieje sposób na wykonanie zrzutu sterty pomimo ograniczeń środowiska wykonawczego App Engine?

Nie ma dobrego sposobu. Oprzyrządowanie nie jest dobrze obsługiwane.