2009-06-29 14 views
10

Jestem ciekawy, czy są jakieś abstrakcje Java, które są podobne do AppDomain .Net.Java AppDomain jak abstrakcja?

W szczególności, jestem ciekawy, ponieważ odkryłem, że z naszym serwerem Coldfusion/J2EE musimy go restartować co kilka dni z powodu wolnego wycieku pamięci, którego jeszcze nie byliśmy w stanie wyśledzić. Może to zrujnować nasze długotrwałe procesy i naprawdę chcielibyśmy, aby powoli popychać ludzi do nowych maszyn JVM w miarę ich przekraczania określonego progu czasu/pamięci.

Z mojego ograniczonego doświadczenia w sieci .NET jestem przekonany, że jest to jedna z sytuacji, w której usługi IIS i AppDomains są w stanie zarządzać w sposób dość płynny przez recykling AppDomains znajdujących się pod presją pamięci. Daj mi znać, jeśli znajdę się daleko w AppDomains pomagając w tym scenariuszu.

Wszelkie sugestie?

Odpowiedz

10

myślę, że przyjął odpowiedź tutaj jest trochę mylące. Samo powiedzenie "nie, nie możesz" nie jest całą historią. Pytanie dotyczy wyładowywania klas Java w procesie serwera w celu usunięcia nieszczelnego kodu z procesu JVM bez ponownego uruchamiania procesu. OP nie żąda funkcji izolacji procesowej, jaką daje aplikacja AppDomain, ale możliwość rozładowania klas w działającej maszynie JVM.Mówię o procesach, ponieważ pod maską AppDomain nie jest procesem, ale cieszy się niektórymi aspektami izolacji, których system operacyjny zapewnia najwyższej jakości proces. Izolat JSR wspomniany odnosi się do tej "podobnej do procesu" izolacji. Rozładowywanie klas klasowych Java, a więc klas, bez cyklowania możliwe jest uruchomienie procesu systemu operacyjnego obsługującego maszynę JVM. Wymieniono kilka metod: SO 148681. Nie jest to trywialne, ani eleganckie w Javie, ale jest to możliwe.

+0

Dobrze, że jesteś. Dzięki za odpowiedzi. –

0

Recykling pojedynczych maszyn JVM na podstawie czasu lub określonych kryteriów, takich jak rosnące zużycie pamięci i wstrzymywanie użycia pamięci, to możliwość zaawansowanych wersji serwera aplikacji, z którym współpracuję, WebSphere. Jeśli serwer aplikacji nie ma takiej możliwości, tworzenie skryptów powłoki w celu uzyskania takiej funkcji powinno być wykonalne.

Działa to całkiem przyjemnie przy założeniu:

a). Żądania użytkowników są rozpylane wokół większego zestawu JVM. b). Wszystkie żądania są bezpaństwowcami lub istnieje możliwość replikacji stanu. Replikacja to możliwości WebSphere i WebLogic, domyślam się, że również inne serwery aplikacji mają taką możliwość.

W takich środowiskach nie ma potrzeby "powolnego" przenoszenia ludzi na inne serwery. Musimy tylko wiedzieć, że możemy bezpiecznie zatrzymać dowolny serwer/JVM i że sesje te zostaną wykryte w innej instancji.

+0

Dzięki za komentarz. Niestety moja aplikacja internetowa nie jest obecnie bezstanowa, a replikacja nie jest możliwa, ponieważ sesja nie podlega przekształceniu do postaci szeregowej. Być może najlepiej będzie mi służyć, robiąc wszystko, co można serializować. –

8

Niestety, nie.

Analogiczną koncepcją w świecie Java jest Izolat, który pojawił się jako pierwszy w JSR 121. Był to interfejs API dla przyszłej funkcji JVM, która umożliwiłaby bezpieczną separację i komunikację pomiędzy różnymi aplikacjami działającymi w tej samej maszynie JVM. Po opublikowaniu JSR (około 2004 r.) Jeden zespół badawczy w Sun pracował w projekcie w Barcelonie. Ten projekt próbował zaimplementować interfejs Isolation API w maszynie HotSpot 1.5 VM firmy Sun. Po dwóch latach wydali prototyp dla SPARC/Solaris. Wersje systemu Windows/Linux nigdy nie zostały wydane z powodu problemów ze stabilnością.

Niedawno SUN wprowadził ograniczoną wersję interfejsu Isolation API do J2ME, koncentrując się na oferowaniu "wielu procesów" w środowiskach, które nie oferowały ich aktywnie. Niedawno zwróciliśmy się również do Sun o status we wdrażaniu Isolate API do standardowych JVM, a ich odpowiedzią było, że planują wydać JVM z ograniczoną obsługą. Planują zaoferować możliwość ładowania/usuwania Isolates, ale bez możliwości komunikowania się między nimi.

Ponadto, istniała stara rezerwa bezpieczeństwa do zbudowania zgodnej z Isolates wersji JVM, o nazwie JanosVM (java 1.1), ale wątpię, czy może być ona dzisiaj przydatna.

Nadzieja to pomaga ...

+0

Dzięki! To było naprawdę interesujące i pouczające! –

Powiązane problemy