vyvchy
    Теми розділу

    10 · Performance testing

    Метрики: response time, throughput, перцентилі

    Зміст

    Перф-звіт — це десяток чисел на одному екрані: середній , запити за секунду, відсоток помилок, завантаження процесора. Кожне можна прочитати правильно й неправильно. Класична сцена: прогін зелений, у звіті «середній час відповіді 180 мс», а того ж дня підтримка приймає скарги на «сайт висне». Обидва твердження правдиві — просто описують різні речі.

    Ця глава — про те, що саме міряє кожна метрика і чому середнє арифметичне в перф-тестуванні майже завжди бреше. Три питання — «що саме виміряно», «під яким навантаженням» і «який зріз розподілу» — закривають більшість суперечок про те, чи є проблема взагалі.

    Час відповіді: одиниця виміру — транзакція

    Канон ISTQB привʼязує час відповіді (response time) не до запиту, а до (transaction) — набору активностей, які система виконує від ініціації до завершення одного або кількох процесів. Саме часи відповіді транзакцій міряють, щоб оцінити продуктивність.

    Різниця практична: «додати товар у кошик» — це не один HTTP-запит, і кожен окремий запит може бути швидким, а транзакція цілком — повільною. Тому транзакції ще й вкладають одна в одну: за один прогін видно і час кроку, і час процесу, а деградацію співвідносять із конкретною транзакцією.

    Другу величину плутають із першою постійно — це (think time). Симульована транзакція може його включати, щоб відображати таймінг реального користувача, і канон записує співвідношення прямо: час відповіді транзакції плюс час на роздуми дорівнює загальному часу цієї транзакції.

    Голе число часу відповіді не діє: канон вимагає доуточнити його часом доби, кількістю одночасних користувачів, обсягом даних. «Скільки в нас час відповіді?» — питання без відповіді.

    Корисна рамка — розкладка за стейкхолдерами: час відповіді — турбота користувача, — турбота бізнесу, — турбота системи. SRE вважає запиту ключовим SLI більшості сервісів — з обмовкою, що клієнтська затримка релевантніша, а виміряти буває можливо лише серверну.

    Latency в JMeter — це не мережева затримка

    Найточніше про межі виміру говорить глосарій JMeter, бо розводить три «часи» поіменно:

    величинащо саме міряється
    Elapsed timeвід моменту перед відправленням запиту до отримання останньої відповіді
    Latencyвід моменту перед відправленням до отримання першої відповіді, разом з обробкою, потрібною зібрати запит і першу частину відповіді
    Connect Timeчас встановлення зʼєднання, включно з рукостисканням SSL; із Latency автоматично не віднімається

    Звідси три висновки. Latency в JMeter — це час до першого байта, інший предмет, ніж мережева затримка як час проходження даних між точками (її механіка — глава DNS, IP, порти та мережа). Connect Time входить у Latency і сам не віднімається, тож «сервер повільний» може означати «повільне рукостискання TLS». І JMeter не включає час рендерингу й не виконує клієнтський код, наприклад JavaScript — звідси розрив «швидкий бекенд ще не означає швидку сторінку».

    Старт виміру
    перед відправленням запиту

    Зʼєднання і TLS
    Connect Time

    Перший байт відповіді
    кінець Latency

    Останній байт відповіді
    кінець Elapsed time

    Пауза користувача
    think time

    Наступна дія сценарію

    Старт виміру
    перед відправленням запиту

    Зʼєднання і TLS
    Connect Time

    Перший байт відповіді
    кінець Latency

    Останній байт відповіді
    кінець Elapsed time

    Пауза користувача
    think time

    Наступна дія сценарію

    Пропускна здатність системи: скільки транзакцій за одиницю часу

    системи (system ) у формулюванні CT-PT — міра кількості транзакцій заданого типу, які система обробляє за одиницю часу: замовлень за годину, HTTP-запитів за секунду. Звідси й побутові RPS та TPS.

    Тут є розбіжність усередині самого ISTQB. Силабус CT-PT §4.2.5 означує пропускну здатність системи через кількість транзакцій і окремо відрізняє її від мережевої пропускної здатності — обсягу даних, переміщених мережею. під тим самим терміном system throughput дає обсяг даних за заданий період, тобто те, що силабус зве network throughput. Одиниця виміру різна: транзакції проти байтів. Розділ уживає формулювання CT-PT, а наслідок простий — «пропускна здатність 200» без одиниці не означає нічого.

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

    Арифметика з канону робить це наочним. 500 користувачів із короткими запитами щохвилини — це 30 000 запитів за годину; ті самі 500 користувачів із тими самими запитами раз на годину — 500. Користувачів однаково, навантаження відрізняється в 60 разів, вимоги до заліза — щонайменше в 60 разів.

    Канон дає й формулу:

    Пропускна здатність системи = [кількість віртуальних користувачів] / ([час обробки] + [час на роздуми]).

    З неї випливає неочевидний ефект: коли час обробки зростає, пропускна здатність може істотно впасти, навіть якщо все інше лишилося незмінним. Тест задає кількість користувачів і паузи, а час обробки задає система — і він росте разом із навантаженням.

    Поза ISTQB метрику називають так само: SRE згадує пропускну здатність системи в запитах за секунду серед поширених SLI, а в k6 запити рахує http_reqs — разом із помилками й тривалістю вона утворює трійку .

    Остання пастка — вікно агрегації: навіть «запитів за секунду» неявно агрегує дані за вікном виміру. Система, що віддає 200 запитів/с у парні секунди і нуль у решті, має те саме середнє, що й система зі сталими 100 запитів/с, але миттєве навантаження вдвічі більше.

    Конкурентність і віртуальні користувачі

    Конкурентність (concurrency) — міра кількості одночасних, паралельних потоків виконання; для інтерактивних систем нею може бути кількість одночасних користувачів. Глосарій ISTQB формулює вужче: одночасне виконання кількох незалежних потоків компонентом або системою.

    Канон вимагає враховувати два різні аспекти робочого навантаження — пропускну здатність і конкурентність. Конкурентність представляє кількість паралельних сесій, кожна з яких може використовувати власні ресурси: навіть при однаковій пропускній здатності обсяг використаних ресурсів залежить від конкурентності. Наслідок: два прогони з однаковим RPS, але різною кількістю — це два різні тести.

    Віртуальний користувач (virtual user) — не людина, а симуляція активностей, що виконуються згідно з операційним профілем користувача; конкурентність в інструментах моделюють, задаючи кількість таких користувачів. Інструментальна форма в JMeter — потік: кожен потік виконує план тесту цілком і повністю незалежно від інших, а кілька потоків симулюють одночасні зʼєднання до серверного застосунку.

    Є межа, яку інструмент називає прямо: k6 попереджає, що для будь-якого сценарію не можна гарантувати, що конкретний віртуальний користувач виконає конкретну ітерацію. Зіставити VU зі значенням можна, а десятого VU з десятою ітерацією — ні. Звідси правило: привʼязуйте дані до віртуального користувача, а не до номера ітерації.

    Конкурентність — ще й окремий вид тесту: перевірка ситуацій, коли конкретні дії відбуваються одночасно, наприклад коли велика кількість користувачів логіниться в один момент. Канон застерігає, що такі проблеми горезвісно важко знайти й відтворити.

    Частка помилок і чому швидкі помилки «покращують» середнє

    (error rate) — це саме частка, а не кількість. У k6 її тримає метрика http_req_failed типу Rate, який відстежує, як часто трапляється ненульове значення; тому поріг пишеться як rate<0.01. Канон ISTQB називає серед технічних метрик кількість помилок, що впливають на продуктивність, а SRE — частоту помилок як частку всіх отриманих запитів.

    Механізм, через який ця метрика ламає всі інші, простий. Помилка зазвичай повертається швидше за успішну відповідь: сервер не робить роботи. Якщо помилкові виміри лежать у тій самій вибірці, що й успішні, вони тягнуть середній час відповіді вниз — прогін виглядає кращим саме тоді, коли система вже не працює. Канон описує цей клас загальніше: сирі результати можуть уводити в оману, і ховаються під добрими загальними числами.

    Навантаження зростає

    Частина запитів падає з 5xx

    Помилка повертається швидше
    сервер не робить роботи

    Виміри лежать в одній вибірці з успішними

    Середній час відповіді падає

    Звіт виглядає кращим за реальність

    Навантаження зростає

    Частина запитів падає з 5xx

    Помилка повертається швидше
    сервер не робить роботи

    Виміри лежать в одній вибірці з успішними

    Середній час відповіді падає

    Звіт виглядає кращим за реальність

    Викривлення працює і в протилежний бік: якщо запит не падає швидким 500, а впирається в помилку зʼєднання, вимір дорівнює часу до зіткнення з нею — при це сам таймаут. Отже помилки псують середнє в обидва боки, і робоче правило одне — сегментувати вибірку за статусом.

    Друга частина проблеми в тому, що коду відповіді мало. Дока k6 каже прямо: іноді навіть відповідь HTTP 200 містить повідомлення про помилку, і тоді варто додати перевірку тіла. Без неї прогін міряє швидкість віддавання помилки. Але й сама перевірка прогін не валить: невдалі чеки не спричиняють переривання тесту й не завершують його зі статусом провалу — k6 лише веде облік їхньої частки, і кожен чек створює rate-метрику. Щоб чек провалив тест, його треба поєднати з порогом; пороги як механізм pass/fail — тема глави про .

    Канонічна таблиця метрик містить окремим рядком розкладку відповідей за кодами HTTP: вона відрізняє «система відмовляє» (5xx) від «ми неправильно приготували дані» (4xx).

    Чому середнє бреше: медіана, p90, p95, p99

    Означення (percentile) коротке: φ-квантиль — значення спостереження з рангом φ*N серед N спостережень; 0,5-квантиль зветься медіаною, 0,95-квантиль — 95-м перцентилем. JMeter формулює прикладніше: медіана є тим самим, що 50-й перцентиль, а 90% Line — значення, нижче за яке лежать 90% семплів.

    Проти середнього арифметичного канон SRE висловлюється без помʼякшень: усереднення часів відповіді приховує важливу деталь — більшість запитів може бути швидкою, а довгий хвіст набагато, набагато повільнішим, тож метрики краще уявляти як розподіли. Приклад звідти ж: типовий запит обслуговується приблизно за 50 мс, а 5% запитів — у 20 разів повільніше; моніторинг лише за середньою затримкою не показав би жодної зміни протягом дня, тоді як хвостова затримка змінювалася істотно.

    Кожен зріз відповідає на своє питання: високий перцентиль, як-от 99-й чи 99,9-й, показує правдоподібне найгірше значення, а 50-й — типовий випадок. На високому навантаженні хвіст важить дедалі більше через ефекти черг, а деякі команди SRE — спираючись на дослідження, за якими користувачі радше терплять трохи повільнішу систему, ніж систему з високою дисперсією, — дивляться лише на високі перцентилі.

    Вважати розподіл нормальним теж не вийде: дані часто скошені, бо жоден запит не може відповісти швидше ніж за 0 мс, а таймаут на 1000 мс означає, що успішних відповідей понад цю межу не буде. Наслідок прямий — не можна припускати, що середнє й медіана однакові або навіть близькі.

    Перцентилі не можна усереднювати

    Це найважливіше практичне обмеження. Попередньо порахований квантиль не можна перерахувати під інше вікно чи інший перцентиль, а квантилі не можна агрегувати: усереднення готових квантилів із кількох інстансів дає статистично беззмістовні значення. У доці Prometheus є дослівний приклад «як не треба» — avg(http_request_duration_seconds{quantile="0.95"}) // BAD! проти правильного histogram_quantile(0.95, sum(rate(http_request_duration_seconds[5m]))) // GOOD.

    Причина технічна: гістограма зберігає розподіл у вигляді, який можна агрегувати, а summary рахує квантилі всередині інструментованої програми й віддає готовими — рядок «Aggregation» для summary так і читається: Not aggregatable. Плата за агрегованість — похибка в межах ширини .

    Щоб порахувати перцентиль, потрібна вся вибірка, а не два готові числа з двох :

    // φ-квантиль — значення з рангом φ*N у відсортованій вибірці
    function percentile(samples: number[], p: number): number {
      const sorted = [...samples].sort((a, b) => a - b);
      const rank = Math.ceil((p / 100) * sorted.length);
      return sorted[Math.max(rank - 1, 0)];
    }

    Скільки перцентилів називає ISTQB

    Факт, який добре назвати на співбесіді: канонічна таблиця метрик CT-PT містить для часу відповіді транзакції рівно чотири зрізи, і найвищий із них — 90% Percentile. Ні p95, ні p99 ця таблиця не називає — вони приходять із практики SRE та з інструментів. У k6 для метрик типу Trend доступні агрегації avg, min, max, med і p(N), де N — перцентиль між 0.0 і 100, а поріг задається в мілісекундах: приклад із доки — p(90) < 300. І дрібниця, яка виглядає як хитрість, а є нормою: вісь Y на графіках затримки зазвичай роблять логарифмічною, інакше хвіст не видно.

    Утилізація ресурсів: метод USE

    Час відповіді й пропускна здатність кажуть, що система повільна; утилізація ресурсів (resource utilization) допомагає сказати, де саме. Найкоротша робоча методологія тут — метод USE: для кожного ресурсу перевірте утилізацію, й помилки.

    термінозначення
    ресурсусі фізичні функціональні компоненти сервера — процесори, диски, шини
    утилізаціясередній час, протягом якого ресурс був зайнятий обслуговуванням роботи
    насичення (saturation)ступінь, до якого ресурс має додаткову роботу, якої не може обслужити — часто в черзі
    помилкикількість подій-помилок

    Одразу пастка, названа в самому джерелі: в утилізації два різні означення. Друге — частка ресурсу, яку використано, і тоді 100% означає, що більше роботи прийняти не можна; у першому сенсі 100% ще не є відмовою. Одиниці теж різні: утилізацію виражають у відсотках за інтервал часу, насичення — як довжину черги, помилки — скалярними лічильниками.

    Як читати значення:

    • 100% утилізації — зазвичай ознака вузького місця, але підтвердити її треба насиченням і його ефектом.
    • Понад приблизно 70% уже може бути проблемою: вимір за довгий період ховає короткі сплески до 100%, а деякі ресурси, як-от жорсткі диски, не можна перервати посеред операції — після 70% затримки в черзі стають частішими.
    • Будь-який ненульовий ступінь насичення може бути проблемою — його міряють довжиною черги або часом очікування в ній.
    • Ненульові лічильники помилок варто розслідувати, надто якщо вони зростають, поки продуктивність погана.
    • Негативний результат теж цінний: низька утилізація, немає насичення, немає помилок — це звужує обсяг розслідування.

    Ресурсами тут є не лише залізо. У мʼютексів утилізація — час утримання лока, насичення — потоки в черзі на нього; у пулів потоків утилізація — час, коли потоки були зайняті, насичення — кількість запитів, що чекають на обслуговування. Це рівно ті ресурси, які CT-PT називає причинами відмов: недостатні пули ресурсів, пули потоків, зʼєднання з базою даних.

    Серед технічних метрик канон ISTQB перелічує утилізацію так: процесор, памʼять, мережева пропускна здатність, мережева затримка, дисковий простір, швидкість вводу-виводу, вільні й зайняті потоки. Окремо називає фонове навантаження на спільні ресурси — на спільному стенді ваш вимір може описувати сусіда.

    Метод має й межу: він найефективніший для ресурсів, які деградують під високою утилізацією, тоді як кеші під нею продуктивність поліпшують. Автор оцінює віддачу як приблизно 80% проблем сервера за 5% зусиль — це чеклист для швидкого старту, а не заміна профілювання.

    Типові помилки

    • «Середній час відповіді 180 мс — усе добре» → виглядає як гарантія, а насправді середнє нічого не каже про хвіст: більшість запитів може бути швидкою, тоді як 5% ідуть у 20 разів повільніше.
    • «Ми взяли p95 з трьох воркерів і усереднили» → виглядає як розумне наближення, а насправді це статистично беззмістовна величина: готові квантилі не агрегуються. Потрібна гістограма або сира вибірка.
    • «Навантаження — 500 користувачів» → виглядає як специфікація, а насправді без операційного профілю це не міра: ті самі 500 користувачів дають 30 000 або 500 запитів за годину.
    • «Прогін зелений, помилок 30%» → виглядає як дрібний недолік, а насправді зелень із помилок і взялася: швидкі відмови тягнуть середнє вниз, таймаути — вгору.
    • «У JMeter Latency 40 мс — мережа хороша» → виглядає як мережевий вимір, а насправді це час до першого байта, у який входить і Connect Time з TLS, і робота сервера.
    • «Процесор на 40%, ресурсів вистачає» → виглядає як здоровий стенд, а насправді довге вікно ховає секундні сплески до 100%, а вузьким місцем може бути чи лок. Канон описує рівно такий випадок: утилізація значно нижча за 75%, тоді як час відповіді ключових транзакцій на порядок завеликий.
    • «Додали чек на тіло — тепер тест валиться при помилках» → виглядає як гейт, а насправді невдалі чеки лише накопичують частку. Гейтом чек стає в парі з порогом.

    Підсумок

    • Метрика без умов виміру нічого не означає. Час відповіді міряють для транзакції, а не для запиту, і доуточнюють часом доби, кількістю одночасних користувачів, обсягом даних.
    • Навантаження задає пропускна здатність системи, а не кількість користувачів. Ті самі 500 користувачів — це 30 000 або 500 запитів за годину. Конкурентність — друга вісь: вона змінює споживання ресурсів навіть при однаковому RPS.
    • Середнє — метрика для слайда. Рішення ухвалюють за розподілом: медіана дає типовий випадок, високий перцентиль — правдоподібне найгірше. Готові перцентилі не усереднюються ніколи.
    • Частка помилок читається разом із часом відповіді, а не після нього. Швидкі відмови занижують середнє, таймаути завищують, а 200 ще не означає успіху.
    • Утилізація каже «де», а не «чи погано». На кожен ресурс потрібні три числа — утилізація, насичення, помилки; ненульова черга вже є сигналом, а ресурсами є й пули потоків та локи.

    Можливі питання

    • «Що таке response time і чим він відрізняється від latency?» — перевіряють, чи розводите три речі: час транзакції, час до першого байта і мережеву затримку. Сильна відповідь називає одиницю виміру канону — транзакцію — і згадує, що в JMeter Latency це , у який входить Connect Time.
    • «Чому не можна оцінювати продуктивність за середнім часом відповіді?» — слабка відповідь зупиняється на «бо є викиди». Сильна пояснює механізм: розподіл скошений, середнє й медіана можуть бути далекі одне від одного, а типовий досвід визначається хвостом, який росте через ефекти черг.
    • «У вас p95 = 800 мс на двох інстансах. Який p95 у сервісу?» — питання-пастка: із двох готових p95 загального не порахувати, бо квантилі не агрегуються.
    • «Скільки віртуальних користувачів треба, щоб перевірити 500 RPS?» — дивляться, чи попросите ви профіль, перш ніж називати число: кількість VU без операційного не задає.
    • «Прогін показав 12% помилок і покращення середнього часу. Що сталося?» — питання рівно про швидкі помилки. Очікують згадку, що помилкові виміри треба винести з вибірки успішних, а таймаути викривляють середнє в інший бік. Бонус — що 200 може містити повідомлення про помилку, а чек без порога прогін не валить.
    • «Процесор на 45%, а користувачі скаржаться. Де шукати?» — дивляться на метод: три метрики на ресурс, питання про вікно усереднення й перехід до програмних ресурсів — пул зʼєднань до БД, пул потоків, локи.

    Джерела

    Час відповіді: одиниця виміру — транзакція

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.2: транзакція як одиниця виміру, вкладені транзакції, час відповіді плюс час на роздуми; §2.1: вимога доуточнювати метрику часом доби, кількістю одночасних користувачів і обсягом даних; §4.1.2: розкладка метрик за стейкхолдерами.
    • Apache JMeter — User's Manual: GlossaryElapsed time, Latency і Connect Time, поведінка при помилці зʼєднання, межі виміру без рендерингу й клієнтського JavaScript.
    • Google SRE Book — Chapter 4. Service Level Objectives — затримка запиту як ключовий SLI і межа «клієнтська релевантніша, серверна вимірна».

    Пропускна здатність системи: скільки транзакцій за одиницю часу

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.5: означення через транзакції, відмінність від мережевої пропускної здатності, формула й арифметика прикладу з 500 користувачами; §2.1: пропускна здатність серед бізнес- і технічних метрик.
    • ISTQB Glossary — друге канонічне означення system throughput, через обсяг даних за період; саме воно розходиться з формулюванням силабуса.
    • Grafana k6 — Metricshttp_reqs як метрика запитів і трійка RED, у якій SRE впізнають три з чотирьох золотих сигналів.
    • Google SRE Book — Chapter 4. Service Level Objectives — пропускна здатність у запитах за секунду як поширений SLI; агрегація за вікном виміру й приклад зі сплесками 200 запитів/с.

    Конкурентність і віртуальні користувачі

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.5: конкурентність як друга вісь навантаження й моделювання її через кількість віртуальних користувачів; §4.2.4: термін «virtual users» для екземплярів-користувачів у профілі навантаження; §1.2: конкурентність як вид тесту й застереження про відтворюваність.
    • ISTQB Glossary — означення concurrency через одночасне виконання незалежних потоків і virtual user як симуляції операційного профілю.
    • Apache JMeter — User's Manual: Elements of a Test Plan — потік як інструментальна форма віртуального користувача й група потоків як місце, де задають їхню кількість.
    • Grafana k6 — Executors — відсутність гарантії «конкретний VU виконає конкретну ітерацію» і що саме з чим можна зіставляти.

    Частка помилок і чому швидкі помилки «покращують» середнє

    • Grafana k6 — Metricshttp_req_failed як метрика типу Rate, форма порога rate<0.01 і трійка «запити, помилки, тривалість».
    • Grafana k6 — Checks — відповідь 200 з повідомленням про помилку, облік частки невдалих чеків і вимога поєднати чек із порогом, щоб він валив тест.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §2.1: кількість помилок серед технічних метрик; §4.1.2: розкладка відповідей за кодами HTTP у таблиці метрик; §2.4: сирі результати вводять в оману, відмови ховаються за добрими загальними числами.
    • Google SRE Book — Chapter 4. Service Level Objectives — частота помилок як частка всіх отриманих запитів серед поширених SLI.
    • Apache JMeter — User's Manual: Glossary — вимір при помилці зʼєднання дорівнює часу до зіткнення з помилкою, зокрема таймауту.

    Чому середнє бреше: медіана, p90, p95, p99

    • Google SRE Book — Chapter 4. Service Level Objectives — середнє приховує довгий хвіст, приклад «50 мс і 5% у 20 разів повільніше», набір зрізів 50/85/95/99 і логарифмічна вісь, скошеність даних і межа «середнє й медіана можуть бути далекі», вибір високих перцентилів як практика команд.
    • Prometheus — Histograms and summaries — означення φ-квантиля через ранг, заборона агрегувати квантилі з дослівним прикладом BAD/GOOD, різниця гістограми й summary, похибка в межах бакета.
    • Apache JMeter — User's Manual: Glossary — медіана як 50-й перцентиль і 90% Line як значення, нижче за яке лежать 90% семплів.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: таблиця метрик, у якій найвищий названий зріз часу відповіді — 90% Percentile.
    • Grafana k6 — Thresholds — агрегації метрик Trend, синтаксис p(N) і межі його значень, приклад p(90) < 300.

    Утилізація ресурсів: метод USE

    • Brendan Gregg — The USE Method — правило «утилізація, насичення, помилки для кожного ресурсу», два означення утилізації, одиниці виміру, пороги 70% і 100%, поширення методу на мʼютекси й пули потоків, межі методу й оцінка «80% проблем за 5% зусиль».
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: розкладка «утилізація — турбота системи»; §2.1: перелік технічних метрик утилізації й фонове навантаження на спільні ресурси; §1.5 і §1.2: недостатні пули ресурсів, пули потоків і зʼєднання з БД як причини відмов.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.