2013-09-25 4 views
4

У меня есть проект в Netbeans, который я профилирую (используя Java 7). То, что я ищу, представляет собой сборку мусора, сколько памяти из пространства Эдена входит в пространство «Оставшийся в живых», и если в пространство Тенерифе есть какая-либо память. Кроме того, я ищу, как пространство Tenured растет со временем.Мониторинг коллекции мусора Java

распечатать статистику GC, но я только получить информацию, как это:

2339.967: [GC 2339.967: [ParNew: 66213K->4522K(69376K), 0.0161101 secs] 284589K->223320K(369484K), 0.0161685 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
2344.543: [GC 2344.543: [ParNew: 66218K->4520K(69376K), 0.0161084 secs] 285016K->223739K(369484K), 0.0161647 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
2349.118: [GC 2349.118: [ParNew: 66216K->4519K(69376K), 0.0159046 secs] 285435K->224159K(369484K), 0.0159587 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 

Кто-нибудь знает способ, чтобы выяснить информацию, которую я ищу?

Спасибо!

+4

Используйте VisualVM, который имеет модуль мониторинга GC. –

+0

См. Также Q/A: http://stackoverflow.com/q/13924565/772000 –

+3

JVisualVM - это путь, за исключением случаев, когда вы хотите выложить для дорогого профилировщика, такого как JProfiler (у них есть бесплатные версии с открытым исходным кодом, если вы соответствуете этому категория).JVisualVM является бесплатным (как в пиве) всегда. – SnakeDoc

ответ

1

Используйте флаг -XX:+PrintGCDetails, чтобы разрешить печать более подробной информации.

+0

Я использую этот флаг. – BarryBostwick

+0

Почему downvote? Вы не упомянули об использовании этого флага в любом месте вашего вопроса. На выходе было показано, что вы используете флаг '-verbose: gc'. –

+1

Я не спустил вниз – BarryBostwick

3

Использование, например. jstat -gcutil -t <pid> <interval> <number_of_samples>

Пример вывода:

jstat -gcutil 21891 250 7 
    S0  S1  E  O  P  YGC YGCT FGC FGCT  GCT 
12.44 0.00 27.20 9.49 96.70 78 0.176  5 0.495 0.672 
12.44 0.00 62.16 9.49 96.70 78 0.176  5 0.495 0.672 
12.44 0.00 83.97 9.49 96.70 78 0.176  5 0.495 0.672 
    0.00 7.74 0.00 9.51 96.70 79 0.177  5 0.495 0.673 
    0.00 7.74 23.37 9.51 96.70 79 0.177  5 0.495 0.673 
    0.00 7.74 43.82 9.51 96.70 79 0.177  5 0.495 0.673 
    0.00 7.74 58.11 9.51 96.71 79 0.177  5 0.495 0.673 

Пояснение:

На выходе этого примера видно, что коллекция молодое поколение произошла между 3 и 4 образца. Коллекция заняла 0,001 секунды и продвинула объекты из пространства eden (E) в прежнее пространство (O), что привело к увеличению использования старого пространства с 9,49% до 9,51%. Перед сборкой пространство для оставшихся в живых было использовано 12,44%, но после этой коллекции было использовано всего 7,74%.

Более тяжелые варианты являются профайлерами, например. JVisualVM с мониторингом GC или новый Java Mission Control с Java 7u40.

Также рассмотрите следующие варианты GC: -XX:+PrintTenuringDistribution, -XX:MaxTenuringThreshold.

+1

А? Почему нисходящий? –

+0

Потому что вы используете гравитационную платформу по умолчанию ;-P – SnakeDoc

8

Вот некоторые полезные GC флаги:

-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintClassHistogram 
-XX:+PrintTenuringDistribution 
-XX:+PrintGCApplicationStoppedTime 

-XX: + PrintTenuringDistribution должно дать вам то, что вы ищете.

+0

Upvoting. Это * * полезный ответ. Кто бы ни подавил этот ответ, то ответ на вопрос без ответа в комментарии не вежлив. –

6

Oracle JDK поставляется стандартно с jvisualvm, который является бесплатным профайлером. Он покажет вам, что вы едите память, процессор, потоки, время в сети, доступ к db и т. Д. Да, это даже показывает время GC и множество других лакомств о GC в целом.

Лучшая часть, это бесплатно! (И это уже может быть установлен на вашей системе, если у вас есть Oracle JDK)

http://www.youtube.com/watch?v=dUQqmnmCBbg

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html

+1

Правда, плюс хорошая гравитационная, эрго Upvote! –

+0

@AlesJ. lol, это все о гравитации fo sho – SnakeDoc

Смежные вопросы