2011-12-19 14 views
5

Piszę serwlet Java, który planuję wdrożyć na Amazon AWS przy użyciu Elastic Beanstalk. Moje testy pokazują, że wszystko działa dobrze, używając małej instancji EC2 przy użyciu ich zasobów Tomcat AMI, z których korzysta Beanstalk.Przydzielanie sterty Java dla Tomcat na instancji EC2

Próbuję dowiedzieć się, jak poprawnie przydzielić przestrzeń sterty Java dla tej konfiguracji. Mała instancja ma 1,7 GB pamięci, więc myślę, że stertę o wielkości 1024 MB będzie działać dobrze. Rozumiem, że pamięć będzie potrzebna dla innych rzeczy, chociaż jedynym "prawdziwym" celem tej instancji jest uruchomienie Tomcata. I wiem też, że jest kwestia dużych stert, w których standardowa maszyna JVM Sun/Oracle naprawdę nie działa.

Czy to rozsądny sposób na przydzielenie pamięci? Czy powinienem używać więcej lub mniej? Jakich narzędzi mogę użyć, aby określić optymalną konfigurację?

Odpowiedz

2

1024 wydaje się być w porządku, może trochę za dużo.

Nie jestem do końca pewien, co robi twój serwlet, ale żeby dać ci pomysł, mam aplikację e-commerce z około 1000 codziennymi użytkownikami działającymi na 2 małych instancjach ec2. Obciążenie Tomcat jest dystrybuowane za pośrednictwem mod_jk.

Nie dostroiłem maszyny JVM i zachowałem ustawienia domyślne. Używam również buforowania obiektów rozproszonych z terakoty, a proces ten wydaje się pochłaniać większość pamięci.

Czy są wdrażane w systemie operacyjnym lub systemie Windows opartym na systemie Linux? IMO, Linux radzi sobie lepiej z zarządzaniem dostępną pamięcią.

Jeśli chodzi o narzędzia, proponuję rozmieścić aplikację tak, jak ma to miejsce w przypadku małej instancji EC2 i za pomocą narzędzia takiego jak JMeter przetestować aplikację. Podczas testu warunków skrajnych możesz otworzyć główne narzędzie (zakładając, że twoja aplikacja jest zainstalowana na systemie Linux i na górze).

Spróbuj przerwać aplikację, sprawdzając, ile ładunku może obsłużyć. To piękno ec2, możesz ustawić środowisko testowe w kilka minut i odrzucić je zaraz po.

+0

Dzięki za twój wkład. Nie będę szczegółowo omawiać naszej aplikacji. Pozwala użytkownikom przeglądać informacje o różnych tematach, a następnie ewentualnie dodawać do nich więcej informacji. Niektóre informacje o tematach są generowane dynamicznie z bazy danych, podczas gdy większość z nich to dane statyczne, które odczytujemy z plików podczas uruchamiania i są przechowywane w naszych własnych strukturach danych na stercie. Łącznie dane to około 250-300 MB. Zgaduję, że kiedy naprawdę zaczniemy działać, będziemy mieć kilkadziesiąt tysięcy użytkowników dziennie. –

+0

W poprzednim projekcie AWS starałem się kontrolować wszystko. Do tego projektu zdecydowałem, że muszę poświęcić więcej czasu na "prawdziwą" aplikację i jak ją sprzedać, a nie proste zadania IT, więc używam po prostu Beanstalk. Oznacza to używanie ich podstawowego AMI, którym jest Linux i Elastic Load Balancer. Czy jest jakiś powód, dla którego używasz mod_jk do dystrybucji obciążenia zamiast ELB? Biorąc to pod uwagę, dlaczego uważasz, że 1024 jest trochę za dużo? To pozostawia 700 MB na wszystko inne, co w rzeczywistości jest niczym innym niż zwykłymi zadaniami systemu operacyjnego. Czy patrzę na to poprawnie? –

+0

@SanderSmith Nadal używam ELB, ale używam go do równoważenia dwóch małych instancji serwera WWW Apache. Następnie mod_jk jest używany z moich instancji serwera WWW Apache do dystrybucji obciążenia do moich instancji tomcat. Apache jest lepszy w obsłudze zasobów statycznych i lepiej obsługuje SSL, dlatego właśnie ich używam. Sądzę, że najlepszą rzeczą, jaką możesz zrobić, to przetestować obciążenie i podjąć decyzje. Jeśli twoja aplikacja spodziewa się, że otrzyma 10 tys. Użytkowników dziennie, nie sądzę, że wystarczy mała instancja ec2 bez względu na to, jak dostroisz JVM –

0

Sprawdź newrelic dla języka Java, aby określić wzorzec użycia sterty.

Powiązane problemy