Непрерывный анализ потоков

Материал из Документация Ключ-АСТРОМ

Применение Ключ-АСТРОМ / Профилирование и оптимизация / Непрерывный анализ потоков

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

В Ключ-АСТРОМ такое поведение автоматически и непрерывно обнаруживается ЕдинымАгентом. Благодаря непрерывному анализу потоков данные постоянно доступны, с историческим контекстом, и их не нужно запускать при возникновении проблемы. Вы можете получать оповещения о тенденциях, анализировать дампы потоков и напрямую начинать улучшать код, когда и где это необходимо, чтобы предотвратить проблемы.

Прежде чем начать

Чтобы начать использовать непрерывный анализ потока

  1. Перейдите в Настройки > Предпочтения > Функции ЕдиногоАгента .
  2. Найдите и включите следующие функции ЕдиногоАгента для технологии, которую вы хотите отслеживать:
Технология мониторинга Функции OneAgent для включения
Java Непрерывный анализ потока
Node.js Мониторинг рабочих потоков Node.js

Предварительная загрузка модуля кода Node.js

Поддерживаемые версии Java

Из-за известной проблемы с Java 11 непрерывный анализ потоков JVM доступен только для Java 8 и Java 17+ (в зависимости от поддерживаемых версий ). Потоки приложений и агентов остаются неизменными.

Анализ данных

Чтобы начать анализировать дампы потоков

  1. Перейдите в раздел Профилирование > Непрерывное профилирование ЦП.
  2. Для группы процессов, которую вы хотите проанализировать, выберите Дополнительно ( … ) > Потоки.
  3. На странице анализа темы вы можете:
    • Проанализируйте распределение потоков по состояниям потоков или по предполагаемому времени ЦП.
    • Включайте или исключайте данные об ожидающих потоках в любое время, установив соответствующий флажок.
    • Фильтровать данные
      • По типу запроса. Выберите Фильтр запросов > Тип и выберите вариант.
      • По запросу имя группы потоков. Выберите имя группы потоков. Сегментация групп потоков учитывает тот факт, что они обычно выполняют разные функции, и дает вам быстрые средства для идентификации потребителей ЦП.
    • Проанализируйте горячие точки метода группы потоков. В столбце Действия группы потоков выберите Дополнительно ( … ) > Хотспоты метода.

Случаи использования

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

  • В системах с высокой нагрузкой могут возникнуть проблемы с блокировкой потоков, что не позволит масштабировать приложение .
  • Если количество активных потоков слишком велико, ресурсы ЦП могут расходоваться впустую из-за чрезмерной загрузки или из-за того, что операционным системам приходится планировать тысячи потоков на ограниченном наборе ядер.

Пример: блокировки препятствуют масштабируемости приложения

Определите проблемы масштабируемости

В этом примере группа процессов idea*.exe показывает всплеск потребления ЦП. Мы исследуем проблему на странице анализа потоков , начиная с фильтрации списка групп потоков по состоянию потока Блокировка.

184.png

Мы видим, что система не в плохом состоянии, но все еще есть блокирующее поведение, влияющее на 23группы потоков. Мы выбираем первую и наиболее затронутую группу потоков, JobScheduler FJ pool, чтобы продолжить наш анализ.

185.png

Для группы потоков JobScheduler FJ pool значительное количество времени (почти половина: 46.1%) постоянно тратится на блокировку, и она распределена по 15потокам. Это указывает на общую блокировку, влияющую на все эти потоки. Мы хотим избежать такого поведения, поскольку оно ограничивает как скорость, так и возможность увеличения пропускной способности путем добавления ресурсов. В конечном итоге это может привести к состоянию, когда система не сможет обрабатывать больше данных, даже если мы добавим больше оборудования.

Чтобы добраться до первопричины, выбираем Дополнительно ( … ) > Методы вызова.

186.png

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

Пример: Большое количество потоков приводит к чрезмерному использованию ресурсов.

Определите группы потоков, интенсивно использующие ЦП

В этом примере группа процессов doaks-prod1-eastus-cassandra тратит часть времени 9.97% на выполнение кода.

187.png

Мы выбираем время ЦП , чтобы понять, как поведение влияет на потребление ЦП. Из диаграммы мы видим, что группа потоков MutationStage вносит наибольший вклад. Из таблицы ниже мы узнаем, что она тратит 1.6 d в Оценочном времени ЦП и 3.55% в Общей трассировке в выполнении кода.

188.png

Мы хотим определить, какой код выполняется и как он влияет на потребление ЦП. После выбора имени группы потоков (MutationStage), первый поток в списке внизу страницы является самым затратным (MutationStage-2).

189.png

Чтобы увидеть список точек доступа, выбираем Дополнительно ( … ) > Хотспоты метода для MutationStage-2.

190.png

Теперь мы видим, что Unsafe.unpark это способствует 30.1% выполнению кода и является хорошим показателем для оптимизации.