Подтвердить что ты не робот

Как профилировать приложения Akka?

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

Я попробовал VisualVM, но я не могу понять, что происходит. Я добавил изображение вывода профилировщика.

Мои вопросы

  • Что, к примеру, это первая строка и почему это занимает столько времени? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Может ли приложения Akka из-за их асинхронного поведения профилироваться вообще?
  • Можно ли, например, посмотреть, как долго один конкретный актер (тип) работает для одного конкретного сообщения (типа), которое он получает?
  • Существуют ли другие лучшие практики для профилирования приложений Akka?

Profiler

4b9b3361

Ответ 1

  • По умолчанию пакеты не профилируются, и их время учитывается в профиле scala.concurrent.forkjoin.ForkJoinPool.scan(). Если все скрытые пакеты могут быть отобраны, будут показаны истинные потребители времени процессора. Например, следующие до/после иллюстративных профилей обнаруживают, что потоки чаще всего усыпляются на sun.misc.Unsafe.park, ожидая, что они будут неактивными. before < img src= "https://i.stack.imgur.com/zhE1b.png" alt= "after" >
  • Приложения Akka могут быть профилированы достаточно хорошо с помощью подходящих инструментов и трассировки вызовов. Известная компания Dapper - широкомасштабная инфраструктура трассировки распределенных систем содержит подробное объяснение этой техники. Твиттер создал Zipkin на основе этого. Он открыт и имеет расширение wiki за хорошее объяснение того, как настроить систему, которая позволяет

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

    На блоке также есть новый ребенок, Kamon. Это интерактивный инструментарий для мониторинга приложений, работающих поверх JVM, который особенно увлекается приложениями, созданными на платформе Replace Platform. Это определенно означает "да" для Akka, и интеграция происходит в виде модулей kamon-akka и kamon-akka-remote, которые приносят инструментарию байт-кода для сбора показателей и автоматического распространения трассировки трассировки от вашего имени. Изучите документацию, начиная с Обзор интеграции Akka, чтобы понять, что она может и как это сделать.

Ответ 2

Всего пару дней назад TypeSafe объявил, что консоль TypeSafe теперь свободен. Я не знаю, что может быть лучше для профилирования приложений Scala/Akka. Вы можете попробовать JProfiler для языков JVM, я использовал его с Java-проектами, но он не бесплатный и для Java.

Ответ 3

Я думал о профилировании/метриках в коде, так как я также активно использую Akka/ Scala для создания производственных приложений, но я также желаю услышать альтернативные способы убедиться, что приложение здорово.

Очень хороший инструмент для сбора метрик в коде, с хорошей документацией и встроенной поддержкой Graphite, Ganglia, Logback и т.д.

У него есть подробные инструменты для сбора статистики в приложении, такие как датчики, счетчики гистограмм, тайминги - информация, чтобы выяснить, каково текущее состояние вашего приложения, сколько было создано актеров и т.д., если они живы, что государство имеет большинство участников и т.д.

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

  1. Профилиторы вроде (VisualVM, XRebel)

Так как я очень доволен выполнением мониторинга, он по-прежнему отвечает на несколько иной вопрос - каковы текущие представления о моем приложении прямо сейчас? Но есть и другой вопрос, который может нас беспокоить - какой из моих кодов медленный (или неряшливый)?

По этой причине у нас есть VisualVM и еще один ответ на этот вопрос - как профилировать актеров Akka с помощью VisualVM.

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

  1. Новая реликвия

Я бы предложил его для некоторых проектов игровых площадок, так как вы можете бесплатно получить решения для мониторинга/профилирования, но по более серьезным проектам я бы пошел на то, что я выделил выше.

Поэтому я надеюсь, что мой обзор был полезен.