Category Archive: Профилирование

Профилирование CPU с помощью Flame Graph

Flame Graph позволяет визуально увидеть чем были заняты процессоры в течении определенного периода.

Снять Flame Graph можно по классической инструкции: https://github.com/BrendanGregg/FlameGraph, что требует некоторых манипуляций.

Но можно пойти более легким путем, используя async-profiler:

  1. Скачиваем стабильный релиз в виде архива
  2. Распаковываем архив
  3. Выполняем команду:
    ./profiler.sh -d 30 -f /tmp/flamegraph.svg 
    

    Где <PID> - это идентификатор Java-процесса.

    -d 30 - продолжительность профилирования, в секундах.

    /tmp/flamegraph.svg - файл сохранения Flame Graph.

Flame Graph можно прекрасно просматрировать в браузере без использования каких-либо дополнительных средств.

В этом можно убедиться на следующем примере Flame Graph (можно кликать на области): Your browser does not support SVG

Поиск искомого Java-процесса можно осуществляется через утилиту jps.

Скрипт, автоматизирующий поиск и снятие Flame Graph:

PID=`jps | grep YOUR_APP_NAME | awk '{print $1}'`
echo PID = $PID
FG=/tmp/flamegraph$PID.svg
echo FG = $FG
~/soft/async-profiler-1.6-macos-x64/profiler.sh -d 30 -f $FG $PID 
p.s. Этому блогу исполнилось 7 лет!