Продуктивність

Довідник з продуктивності агента OpenTelemetry Java

Агент OpenTelemetry Java інструментує ваш застосунок, працюючи всередині тієї ж Java Virtual Machine (JVM). Як і будь-який інший програмний агент, агент Java вимагає системних ресурсів, таких як процесор, памʼять і пропускна здатність мережі. Використання ресурсів агентом називається накладними витратами агента або накладними витратами на продуктивність. Агент OpenTelemetry Java має мінімальний вплив на продуктивність системи при інструментуванні застосунків JVM, хоча кінцеві накладні витрати агента залежать від багатьох факторів.

Деякі фактори, які можуть збільшити накладні витрати агента, є екологічними, такими як архітектура фізичної машини, частота процесора, обсяг і швидкість памʼяті, температура системи та конкуренція за ресурси. Інші фактори включають віртуалізацію та контейнеризацію, операційну систему та її бібліотеки, версію та постачальника JVM, налаштування JVM, алгоритмічний дизайн програмного забезпечення, що моніториться, та залежності програмного забезпечення.

Через складність сучасного програмного забезпечення та широке різноманіття сценаріїв розгортання неможливо надати єдину оцінку накладних витрат агента. Щоб визначити накладні витрати будь-якого інструментального агента в даному розгортанні, необхідно проводити експерименти та збирати вимірювання безпосередньо. Тому всі заяви про продуктивність слід розглядати як загальну інформацію та рекомендації, які підлягають оцінці в конкретній системі.

Наступні розділи описують мінімальні вимоги до агента OpenTelemetry Java, а також можливі обмеження, що впливають на продуктивність, і рекомендації щодо оптимізації та усунення проблем з продуктивністю агента.

Рекомендації щодо зменшення накладних витрат агента

Наступні найкращі практики та техніки можуть допомогти зменшити накладні витрати, спричинені агентом Java.

Налаштування вибірки трасування

Обсяг оброблюваних інструментами відрізків може впливати на накладні витрати агента. Ви можете налаштувати вибірку трасування, щоб відрегулювати обсяг відрізків та зменшити використання ресурсів. Див. Вибірка.

Вимкнення конкретних інструментів

Ви можете додатково зменшити накладні витрати агента, вимкнувши інструменти, які не потрібні або створюють занадто багато відрізків. Щоб вимкнути інструмент, використовуйте -Dotel.instrumentation.<name>.enabled=false або змінну середовища OTEL_INSTRUMENTATION_<NAME>_ENABLED, де <name> — це назва інструменту.

Наприклад, наступна опція вимикає інструмент JDBC: -Dotel.instrumentation.jdbc.enabled=false

Виділення більшої кількості памʼяті для застосунку

Збільшення максимального розміру купи JVM за допомогою опції -Xmx<size> може допомогти зменшити накладні витрати агента, оскільки інструменти можуть створювати велику кількість обʼєктів з коротким строком існування у памʼяті.

Зменшення ручного інструментування до необхідного мінімуму

Занадто багато ручного інструментування може призвести до неефективності, що збільшує накладні витрати агента. Наприклад, використання @WithSpan на кожному методі призводить до високого обсягу відрізків, що, своєю чергою, збільшує шум у даних і споживає більше системних ресурсів.

Забезпечення достатньої кількості ресурсів

Переконайтеся, що ви виділили достатньо ресурсів для вашого інструментування та для Колектора. Кількість ресурсів, таких як памʼять або диск, залежить від архітектури вашого застосунку та потреб. Наприклад, поширена конфігурація — запуск інструментованого застосунку на тому ж хості, що й Колектор OpenTelemetry. У такому випадку розгляньте можливість правильного розподілу ресурсів для Колектора та оптимізації його налаштувань. Див. Масштабування.

Обмеження, що впливають на продуктивність агента Java

Загалом, чим більше телеметрії ви збираєте з вашого застосунку, тим більший вплив на накладні витрати агента. Наприклад, трасування методів, які не мають відношення до вашого застосунку, все одно може призвести до значних накладних витрат агента, оскільки трасування таких методів є обчислювально більш витратним, ніж виконання самого методу. Аналогічно, теґи з високою кількістю елементів в метриках можуть збільшити використання памʼяті. Ведення журналів налагодження, якщо воно увімкнене, також збільшує кількість операцій запису на диск і використання памʼяті.

Деякі інструменти, наприклад JDBC або Redis, створюють великий обсяг відрізків, що збільшує накладні витрати агента. Для отримання додаткової інформації про те, як вимкнути непотрібні інструменти, див. Вимкнення конкретних інструментів.

Усунення проблем з накладними витратами агента

При усуненні проблем з накладними витратами агента виконайте наступні дії:

  • Перевірте мінімальні вимоги. Див. Передумови.
  • Використовуйте останню сумісну версію агента Java.
  • Використовуйте останню сумісну версію вашої JVM.

Розгляньте можливість виконання наступних дій для зменшення накладних витрат агента:

  • Якщо ваш застосунок наближається до меж памʼяті, розгляньте можливість виділення йому більшої кількості памʼяті.
  • Якщо ваш застосунок використовує весь процесор, можливо, вам варто масштабувати його горизонтально.
  • Спробуйте вимкнути або налаштувати метрики.
  • Налаштуйте параметри вибірки трасування для зменшення обсягу відрізків.
  • Вимкніть конкретні інструменти.
  • Перегляньте ручне інструментування на предмет непотрібного створення відрізків.

Рекомендації щодо вимірювання накладних витрат агента

Вимірювання накладних витрат агента у вашому власному середовищі та розгортаннях надає точні дані про вплив інструментування на продуктивність вашого застосунку або сервісу. Наступні рекомендації описують загальні кроки для збору та порівняння надійних вимірювань накладних витрат агента.

Визначте, що ви хочете виміряти

Різні користувачі вашого застосунку або сервісу можуть помічати різні аспекти накладних витрат агента. Наприклад, кінцеві користувачі можуть помітити погіршення затримки сервісу, тоді як потужні користувачі з великим навантаженням більше звертають увагу на накладні витрати процесора. З іншого боку, користувачі, які часто розгортають застосунки, наприклад через еластичні навантаження, більше піклуються про час запуску.

Зведіть ваші вимірювання до факторів, які точно впливають на досвід користувачів, щоб ваші набори даних не містили нерелевантної інформації. Деякі приклади вимірювань включають наступне:

  • Середнє використання процесора користувачем, пікове використання процесора користувачем та середнє використання процесора машиною
  • Загальний обсяг виділеної памʼяті та максимальний використаний обсяг купи
  • Час паузи збору сміття
  • Час запуску в мілісекундах
  • Середня затримка сервісу та затримка сервісу на 95-й процентилі (p95)
  • Середня пропускна здатність читання та запису мережі

Підготуйте відповідне тестове середовище

Вимірюючи накладні витрати агента в контрольованому тестовому середовищі, ви можете краще визначити фактори, що впливають на продуктивність. При підготовці тестового середовища виконайте наступне:

  1. Переконайтеся, що конфігурація тестового середовища схожа на промислову.
  2. Ізолюйте застосунок, що тестується, від інших сервісів, які можуть заважати.
  3. Вимкніть або видаліть усі непотрібні системні сервіси на хості застосунку.
  4. Переконайтеся, що застосунок має достатньо системних ресурсів для обробки тестового навантаження.

Створіть набір реалістичних тестів

Розробіть тести, які ви запускаєте проти тестового середовища, щоб вони максимально нагадували типові навантаження. Наприклад, якщо деякі точки доступу REST API вашого сервісу схильні до високих обсягів запитів, створіть тест, який імітує інтенсивний мережевий трафік.

Для Java-застосунків використовуйте фазу розігріву перед початком вимірювань. JVM є високодинамічною машиною, яка виконує велику кількість оптимізацій за допомогою компіляції в режимі реального часу (JIT). Фаза розігріву допомагає застосунку завершити більшість завантаження класів і дає компілятору JIT час для виконання більшості оптимізацій.

Переконайтеся, що ви запускаєте велику кількість запитів і повторюєте тест багато разів. Це повторення допомагає забезпечити репрезентативну вибірку даних. Включіть сценарії помилок у ваші тестові дані. Імітуйте рівень помилок, схожий на нормальне навантаження, зазвичай від 2% до 10%.

Збирайте порівнянні вимірювання

Щоб визначити, які фактори можуть впливати на продуктивність і спричиняти накладні витрати агента, збирайте вимірювання в тому ж середовищі після зміни одного фактора або умови.

Аналізуйте дані про накладні витрати агента

Після збору даних з декількох проходів ви можете побудувати результати на графіку або порівняти середні значення за допомогою статистичних тестів, щоб перевірити наявність значущих відмінностей.

Враховуйте, що різні стеки, застосунки та середовища можуть призвести до різних операційних характеристик і різних результатів вимірювання накладних витрат агента.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (2a3c5648)