Trochę teorii - Maksymalne
wykorzystanie pamięci i szybkość aplikacji z BigMemmory.
BigMemmory umożliwia aplikacjom tworzonym w języku Java natychmiastowy i łatwy dostęp do dużych ilości pamięci
nie ograniczając się przy tym działaniem dotyczącym usuwania śmieci, które
standardowo wykonuje "garbage collector". BigMemmory jest
kompatybilny ze starszym sprzętem oraz wszystkimi popularnymi virtualnymi
maszynami java (JVM's) takimi jak JDK (Java Development Kit), JRockit, IBM,
oraz HotSpot.
Narzędzie jakim jest BigMemmory
oparte jest o rozwiązanie open-source Ehcache, a swoim działaniem rozszerza
jego możliwości. Podłączenie do ehcache polega na wprowadzeniu kilku prostych
zmian w konfiguracji.
Zastosowanie BigMemmory umożliwia
utworzenie bardzo dużego buforu (cache). Bufor ten pomimo dużego rozmiaru jest
buforem innego typu w porównaniu ze standardowym (object heap) i przechowywany jest w pamięci poza standardową stertą, przez co nie podlega
procesowi odśmiecania przez garbage collector. Efektem takiego podejścia jest
100 krotne przyspieszenie w porównaniu do cachu przechowywanego na dysku oraz
możliwość tworzenia bardzo dużych pamięci podręcznych. Tak naprawdę jedynym
ograniczeniem jest ilość pamięci RAM w danym sprzęcie. Wykorzystując BigMemmory
można efektywniej wykorzystywać dostępną pamięć i pozbyć się niedogodności i
opóźniań związanych z odśmiecaniem przez garbage collector.
W jaki sposób to pomaga?
Ogólnie rzecz biorąc chodzi o
oszczędzanie czasu jaki potrzebny jest na działania odśmiecające czyli garbage
collector. W momencie odśmiecania mogą występować nieprzewidywalne przerwy w działaniu aplikacji, które stają się dłuższe i występują częściej w momencie
wykorzystywania stosu (heap used). W BigMemmory w cachu'u umieszczonym poza
stertą możliwy staje się dostęp do dużych ilości danych, a to wszystko zamyka
się w jednym JVM oraz wszystko dzieje się poza obszarem objętym przez garbage
collector bez żadnych przerw na odśmiecanie.
Podsumowując dzięki temu
rozwiązaniu można :
- Maksymalnie wykorzystać pamięć dostępną na urządzeniu
- Poprawić szybkość działania i szybkość odpowiedzi aplikacji
- Wyeliminować czas potrzebny na konfigurowanie GC i inne nieefektowne rozwiązania
- Podnieść wydajność przetwarzania cięgle rosnącej ilości danych
Wyeliminowanie
skomplikowanego i wyczerpującego konfigurowania GC.
By faktycznie odczuć poprawę
wydajności aplikacji poprzez prawidłowe skonfigurowanie działają GC trzeba
włożyć w to dużo pracy, czasu i testów by dojść lub nie do choć minimalnych
wyników. Niejednokrotnie administratorzy spędzają długie godziny nad strojeniem
GC tylko po to by po tym czasie cofnąć wszystkie wprowadzone zmiany i zacząć od
nowa. Stosując BigMemmory czasochłonne konfigurowanie GC odchodzi w niepamięć.
W rzeczywistości okazało się że wystarczyły 3 godziny na skonfigurowanie
BigMemmory by osiągnąć rezultaty wydajnościowe jakie wymagały ponad
trzymiesięcznych konfiguracji i testów istniejących środowisk w których
standardowo działał GC.
Zaleceniem w zastosowaniu
BigMemmory jest unikanie działania GC, który potrafi "przytkać,
zamrozić" działanie aplikacji niezależnie od rozmiaru pamięci podręcznej
(Cache Size). Użycie BigMemmory działa prewencyjnie przeciw spadkom wydajności
i wstrzymaniem działania aplikacji spowodowanych przez działanie GC. Dla
potwierdzenia przeprowadzono testy wydajnościowe gdzie pracując na dostępnej
pamięci podręcznej skutkowały coraz dłuższymi pałazami wynikającymi z działania GC, a wraz ze wzrostem rozmiaru bufora aż do maxymalnej wartość GC
praca aplikacji została "zamrożona" na czas liczony w minutach.
Zmniejszenie kosztów i
złożoności wdrożenia.
W wielu systemach stosuję się
politykę przydzielania od 1 do 4 GB pamięci przeznaczonych na jeden JVM na
danej maszynie co ma zminimalizować trudności związane z niewyrabianiem się
Garbage Collect'ora. Tego rodzaju polityka z czasem utrudnia zarządzanie i robi
się kosztowne w skali przedsięwzięcia.
Stosując BigMemmory zwiększamy
gęstość uruchamiania aplikacji wykorzystując mniejszą ilość (ale o większych
rozmiarach) pamięci przeznaczonych dla pojedynczego JVM co skutkuje
oszczędnością czasu. Tego rodzaju rozwiązanie zapewni bardziej zrównoważone i
wydajniejsze działanie zakładając również, że ilość danych jakie będą do
przerobienia i tak nieuchronnie wzrośnie.
Przydatne informacje :
Komentarze
Prześlij komentarz