Rozmiar Perm Size a wydajnosc aplikacji

0

Czy zbyt mala ilosc 'Perm size' moze spowolnic dzialanie aplikacji, nie powodujac out of memory ?

Czy może zbyt mala ilosc 'perm size' nie ma zadnego wplywu na performance aplikacji ?

0

Nie ma wpływu, o ile nie dewelopujesz np. z użyciem JRebel czy innego narzędzia które tyka ten obszar pamięci. W javie 8 permgen zmieniono na metaspace który się sam rozszerza, więc powinieneś o niej powoli zapomnieć.

0

Zasadniczo nie. Albo permgen ma wystarczająco dużo miejsca albo nie ma. GC go nie tyka więc nie ma tam co spowalniać pracy. Niemniej pergen trzyma też takie rzeczy jak internowane stringi które pozwalają oszczędzić sterte (jak masz w programie milion identycznych stringów to bardzo możliwe że w rzeczywistości masz tylko jedną instancje). Więc może tak być że większy permgen = większy rozmiar cache na takie rzeczy = mniejsze zużycie sterty = mniej GC = lepsza wydajność.

0

@Shalom To nie jest tak że im większy permgen tym więcej stringów jest internowanych. Trafiają tam jedynie te które są znane przy kompilacji i te na których jawnie wywołasz .intern(), czyli nie ma to wpływu na wydajność. Możesz sam przyspieszać, ryzykując OutOfMemory: PermGen.

0

nie mamy internowanych stringow.

Ale w obecnej sytuacji java.lang.finalize przykladowo zajmuje okolo 250mb (perm size teze jest 250mb) ? Co przewaznie oprocz internowanych stringow jest tam wrzucane, rozumiem ze metadata z instancji klas, gdy tworzymy duzo obiektow, cos jeszcze ?

0

teraz wskazuje Eclipse MAT z heapa, 50% na java.lang.finalize (serwer dziala teraz ok, nie mam neistety dumpa z momentu kiedy byly problemy...)

0

http://stackoverflow.com/questions/8355064/is-memory-leak-why-java-lang-ref-finalizer-eat-so-much-memory

Może właśnie to jest problemem? Ale nie sam rozmiar, tylko fakt że jest dużo rzeczy do zfinalizowania. Używacie w ogóle tych metod?

0

@Krzywy Terrorysta a nie używacie jakiegoś frameworka który robi proxy? Czegoś co używa cgliba na przykład albo bardzo dużo AOP? Jakieś LambdaJ? Albo nie robicie miliona lambd zamiast napisać zwykłej klasy / metody? Bo to też wpada do permgena, bo to definicje nowych klas (nawet jeśli są anonimowe i często jednorazowe).

0

mamy duzo proxy, to fakt :P

jednak out of memory nie leci, bo wczesniej wydajnosc jest tak slaba, ze restartujemy serwer

0

Proponuje odpalic serwer z jakimś VisualVM chociażby i przenalizować co was tak zjada.

0

Znalezlismy problem, dodanie biblioteki: https://code.google.com/p/javasimon/

powodowalo, ze wraz z im wiekszym ruchem uzycia aplikacji, serwer zaczynal coraz wolniej dzialac, az byl wymagany restart.

Pytanie teraz tylko, czy ta biblioteka jest tak "krzywa", czy moze nie nadaje sie do srodowiska produkcyjnego albo zle jej uzywamy ? :P

Nasze uzycie:


public Object intercept(InvocationContext context) throws Exception {
            SimonManager.callback().addCallback(new TimelineCallback(10, 60000L));

            MDC.put(sth, "prefix :)");

            Stopwatch stopwatch = SimonManager.getStopwatch(clazz + "." + method);
            Split split = stopwatch.start();
            Object ret = context.proceed();
            split.stop();
            logger.log(Level.INFO, stopwatch);

            return ret;
        } finally {
            MDC.remove(sth);
        } 

0

w sumie jak teraz patrze to bez sensu
SimonManager.callback().addCallback(new TimelineCallback(10, 60000L));
w interceptorze...

1 użytkowników online, w tym zalogowanych: 0, gości: 1