Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

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

Материал из Документация АппОптима

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

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

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

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

  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% выполнению кода и является хорошим показателем для оптимизации.