Анализ журналов GC для горячих точек Sun, JVM 6
Я пытаюсь проанализировать поведение GC для нашего приложения (работает в Tomcat, в Горячих точках Sun, JVM 1.6).
До сих пор я проинструктировал JVM об отправке журналов GC в отдельный файл, используя...
-Xloggc:gc.log
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
... и использовал jstat для вывода журналов с использованием...
jstat -gc -t 29045 5s > jstat.gc
Я вижу интересную информацию, но не нашел инструмент, помогающий мне анализировать/визуализировать эти журналы. Я указал на GCViewer на этот вопрос, но он только анализирует несколько строк журнала из gc.log, а затем сбой сбой. Есть ли лучший или более современный инструмент для анализа этих конкретных журналов, для конкретной JVM, которую я использую?
Ответы
Ответ 1
gcviewer
не обновлялся в течение нескольких лет, поэтому он ударил или пропустил - некоторые файлы gc будут работать нормально, другие получат исключения.
IBM gc log parser работает приемлемо,
http://www.alphaworks.ibm.com/tech/pmat/faq
Sun имеет нечто, называемое GCPortal, но для этого требуется:
- установить на сервер веб-приложений
- установка awk и perl
- установка РСУБД с драйвером и конфигурацией JDBC
- и реальный убийца, стороннее графическое/графическое программное обеспечение, которое раньше было бесплатным, а теперь нет.
Удивительно.
gchisto
умер, в проекте больше ничего не было.
HPJmeter не понимает файлы IBM gc.
Ответ 2
Я лично использую HP JMeter для большой визуализации GC. он работает "хорошо" на SUN JRE, и исключительно хорошо работает на HP JRE (go figure).
С Sun HotSpot 1.6 (на платформах, отличных от HP) я использую эти опции GC для создания журналов для анализа:
-Xloggc:/path/to/vgc/log/location/logfile.vgc --XX:+PrintHeapAtGC
Ответ 3
Инструменты, доступные в IBM Support Assistant, выполняют довольно хорошую работу.
Ответ 4
Вы посмотрели на jvisualvm? Поставляется с последним JDK и позволяет вам смотреть JVM. Пример вывода (используя visualGC плагин). Пример вывода - alt text http://g4u0420c.houston.hp.com/en/5992-4687/img/visualgc_2.png
Ответ 5
Я пытался использовать Visual GC, но, похоже, работает с id-процессом (jvm one ou jstatd one). Я не могу использовать его с jstat.gc, я имею в виду файл, а не поток
Правильно?
Ответ 6
Попробуйте использовать gchisto (gchisto.dev.java.net). Он может понять выход журнала GC (я не уверен, был ли он обновлен для работы с GC G1). Вы должны получить исходники из CVS (для этого вам нужна учетная запись dev.java.net) и создать это самостоятельно
Ответ 7
Вот скребок журнала $0.00 для 1.5 CMS-сборщика, который дает вам представление высокого уровня о паузах GC.
Вам может потребоваться изменить параметр позиционного параметра $7 для функции timestamp, чтобы соответствовать синтаксису строки журнала (мой .out получает "усиленный" Tanuki Wrapper).
#! /usr/bin/awk -f
# Awk script to parse .out logs and print total of
# stop-the-world GC pause times in ten minute intervals
BEGIN {print "t\timark\tmark\tremark\tfullgc"}
/CMS-initial-mark:/ {
t=timestamp($7);
imark[t] += $(NF-1);
}
/\[CMS-concurrent-mark:/ {
t=timestamp($7);
split($(NF-1), b, "/");
# print t" NF="NF" val="b[1];
mark[t] += b[1];
}
/CMS-remark/ {
t=timestamp($7);
remark[t] += $(NF-1);
}
/\[Full GC / {
t=timestamp($7);
level=0;
for (i=1; i<=NF; i++) {
if ($i ~ /\[/) {
level++;
} else if ($i ~ /\]/) {
level--;
}
}
while (level > 0) {
getline;
for (i=1; i<=NF; i++) {
if ($i ~ /\[/) {
level++;
} else if ( $i ~ /\]/ ) {
level-- ;
}
}
}
if ( $(NF) ~ /secs\]/ ) {
full[t] += $(NF-1) ;
}
}
function timestamp(str) {
split(str, a, ":");
return a[1]":"substr(a[2],0,length(a[2])-1)"0";
}
# print out UK+US trading hours
END {
for (hour = 5; hour <= 16; hour++) {
for (minute = 0; minute <= 59; minute+=10) {
t = sprintf("%02d:%02d", hour, minute);
printf "%s\t%d\t%d\t%d\t%d\n", t, imark[t], mark[t], remark[t], full[t];
}
}
}