Tuning JVM i przygoda z Xss

ostatnio dostałem zadanie zoptymalizowania maszyny wirtualnej. No cóż, w necie łatwo o jest opis parametrów, ale opis traktujący o temacie nie jest już tak łatwo.

Podeszłem więc empirycznie do tematu :)
– przeczytałem kilka artykułów SUN/ORACLE
– przeczytałem kilka wpisów dot. tuningu
– przygotowałem maszynę testową i … testowałem z różnymi ustawieniami

Poniżej są ustawienia dla lokalnego serwera:

-server -XX:MaxPermSize=256M -Xss1024k -Xms1024M -Xmx1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80

Dla serwera produkcyjnego należy przynajmniej dostosować Xmx i Xms do większych wartości.

Na co jednak należy zwrócić szczególną uwagę to parametr Xss. Określa on maksymalną wielkość pamięci dla pojedyńczego wątku. Ja, podczas zabawy z wartościami, omyłkowo zamiast k wpisałem m … 1GB na wątek. Serwer i system operacyjny naturalnie stały w miejscu i wcale nie było łatwo znaleźć dlaczego. Co więcej, Xmx (czyli maksymalna ilość pamięci dla JVM) wcale nie uwzględnia Xss. To oynacza, iż całkowita pamięć zużyta przez JVM jest sumą:
Xss*ilość wątków + HEAP (max wartść to Xmx)

Całość oczywiście nie wypływa szybko na wierzch, gdy się testuje na lokalnej maszynie, gdyż zwykle liczba wątków jest mała. Na szczęście Continious Integration pokazuje zwykle problem (jeśli masz testy integracyjne, a masz prawda?).

Informacje o @albgorski

Od 1999 roku profesjonalnie zajmuję się rozwijaniem oprogramowania. Głównie Java, ale także Groovy, PHP, HTML, JavaScript oraz Adobe Flex. Fascynują mnie metody wymiany danych, ich przechowywania oraz dostępowania. Jestem WIELKIM zwolennikiem Clean Code, TDD oraz agilistą (może lepiej lean-istą). Ekosystem Java dostarcza WIELE świetnych frawework-ów i bibliotek, a społeczność miłośników języka Java jest najlepsza pod słońcem :)
Ten wpis został opublikowany w kategorii groovy, java i oznaczony tagami , , . Dodaj zakładkę do bezpośredniego odnośnika.

Możliwość komentowania jest wyłączona.