Анализ журналов GC для горячих точек Sun, JVM 6 - PullRequest
14 голосов
/ 03 декабря 2009

Я пытаюсь проанализировать поведение 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, которую я использую?

Ответы [ 7 ]

6 голосов
/ 17 июля 2010

gcviewer не обновлялся в течение ряда лет, поэтому он попал или не попал - некоторые файлы gc будут работать нормально, другие получат исключения.

IBM gc log parser работает приемлемо, http://www.alphaworks.ibm.com/tech/pmat/faq

У Солнца есть нечто, называемое GCPortal, но оно требует:

  • установить на сервер веб-приложений
  • установка awk и perl
  • установка СУБД с драйвером JDBC и настройка
  • и реальное убийственное, стороннее программное обеспечение для построения графиков и диаграмм, которое раньше было бесплатным, а сейчас - нет. Удивительно.

gchisto умер, в проекте больше ничего нет.

HPJmeter не понимает файлы IBM gc.

3 голосов
/ 30 марта 2011

Инструменты, доступные в IBM Support Assistant , выполняют довольно хорошую работу.

3 голосов
/ 03 декабря 2009

Я лично использую HP JMeter для большой визуализации ГХ. он работает нормально на SUN JRE и исключительно хорошо на HP JRE (см. рисунок).

В Sun HotSpot 1.6 (на платформах не HP) я использую эти опции GC для создания журналов для анализа:

-Xloggc:/path/to/vgc/log/location/logfile.vgc  --XX:+PrintHeapAtGC 
2 голосов
/ 03 декабря 2009

Вы смотрели на jvisualvm? Поставляется с последней версией JDK и позволяет вам наблюдать за JVM. Пример вывода (с помощью плагина visualGC ). Пример вывода - альтернативный текст http://g4u0420c.houston.hp.com/en/5992-4687/img/visualgc_2.png

0 голосов
/ 12 июня 2010

Вот скребок для бревен за 0,00 $, подходящий для коллектора 1,5 CMS, который дает вам высокий уровень просмотра пауз ГХ.

Вам может потребоваться изменить аргумент позиционного параметра $ 7 на функцию отметки времени, чтобы соответствовать синтаксису строки журнала (my .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];
    }
  }
}
0 голосов
/ 04 марта 2010

Попробуйте использовать gchisto (gchisto.dev.java.net). Он может понять вывод журнала GC (я не уверен, был ли он обновлен для работы с G1 GC). Вы должны получить исходники из CVS (для этого вам нужна учетная запись dev.java.net) и собрать это самостоятельно

0 голосов
/ 24 декабря 2009

Я пытался использовать Visual GC, но, похоже, он работает с процессом id (jvm one или jstatd one). Я не могу использовать его с jstat.gc, я имею в виду файл, а не поток Это правильно?

...