Статьи

Начиная с JHiccup

После написания моего поста «Как обнаружить и диагностировать медленный код в работе» читатель посоветовал мне попробовать jHiccup из систем Azul .

В прошлом году я пошел на лекцию создателя jHiccup Гила Тене о правильном способе измерения задержки, где, среди прочего, он познакомил нас с jHiccup. Это было в моем списке продуктов для расследования, и это дало мне импульс, чтобы наконец продолжить мое расследование.

JHiccup измеряет задержку системы сверх фактического программного кода. Например, время GC и другие события ОС и оборудования, которые добавляют скачки задержки для бесперебойной работы вашей программы. Это важно понимать, потому что ваша программа никогда не может иметь лучшие задержки, чем базовая среда, в которой она работает.

Короче говоря, я люблю инструмент и думаю, что он будет очень полезен для меня сейчас, когда я начал его использовать. Этот пост не о том, чтобы рассказать вам все о jHiccup, я отсылаю вас к документации для этого. Этот пост является «руководством по jHiccup», чтобы показать вам, как я его запустил, и надеюсь, что у вас появился аппетит попробовать его в своем собственном коде.

Шаг 1: Скачать продукт

Загрузите код, он с открытым исходным кодом, и вы можете получить его здесь . Разархивируйте файл, и вы увидите jHiccup.jar, который мы будем использовать на следующем шаге.

Шаг 2: Запустите вашу программу с помощью jHiccup

Есть несколько способов запустить jHiccup, но я так и сделал. Все, что вам нужно сделать, это добавить эту опцию vm в вашу командную строку:

1
-javaagent:jHiccup.jar="-d 0 -i 1000 -l hiccuplog -c"

Существует множество конфигураций, выбранные здесь означают:

  • -d Задержка, до которой начинается задержка записи — это позволяет игнорировать любой период прогрева кода. (по умолчанию через 30 с)
  • -i Интервал данных, как часто данные записываются. (по умолчанию каждые 5 секунд)
  • -l Имя файла журнала, в который записываются данные.
  • -c Запускает управляющую JVM и записывает данные в logFile.c. Супер полезно сравнить с реальной программой, чтобы увидеть, было ли событие глобальным на машине.

Шаг 3: Обработка файла журнала

Запустите эту команду в файле журнала (вы можете обработать как файл журнала программы, так и файл журнала управления .c).

1
jHiccupLogProcessor -i hiccuplog -o myhlog

В результате получается два файла, нас интересует один вызов myhlog (не myhlog.hgram), который мы будем использовать на последнем шаге.

Шаг 4. Создание графика в Excel

Теперь по-настоящему приятно. Откройте электронную таблицу jHiccupPlotter.xls и убедитесь, что вы включили макросы.

Вы увидите такой лист:

Снимок экрана 2015-02-20 в 12.19.38

Просто выберите файл на шаге 3 и выберите заголовок диаграммы (это действительно полезная функция, когда вы начинаете сравнивать графики), и через несколько секунд у вас появятся графики распределения задержек.

пример

У меня была программа (не особенно чувствительная к задержкам), и я хотел понять, как различные сборщики мусора влияют на задержку.

Все, что мне нужно было сделать, это запустить мою программу с разными настройками сборщика мусора и сравнить графики. Конечно, это был слегка продуманный пример, который мне пришлось передать, но вы понимаете, легко изменить настройки или код jvm и получить сопоставимые результаты. Управляющая программа также важна для понимания того, что еще происходит на вашей машине, что может повлиять на задержку вашей программы.

Вот мои результаты: интересно посмотреть, как различные GC влияют на задержку, и это прекрасно демонстрируется с помощью jHiccup.

Используя серийный коллектор:

Снимок экрана 2015-02-20 в 12.32.46

Используя коллектор G1:

Снимок экрана 2015-02-20 в 12.36.42

Использование коллектора G1 — максимальная пауза установлена ​​в 1 мс:

Снимок экрана 2015-02-20 в 12.41.42

Использование сборщика CMS:

Снимок экрана 2015-02-20 в 12.46.16

Используя параллельный GC:

Снимок экрана 2015-02-20 в 12.49.25

Ссылка: Начиная с jHiccup от нашего партнера по JCG Дэниела Шайя в блоге Rational Java .