qaload | Unsorted

Telegram-канал qaload - 📢 Load & Performance

820

Избранные материалы о тестировании производительности. Чат и источник тем: @qa_load

Subscribe to a channel

📢 Load & Performance

Свои первые замеры производительности делал читая логи

Привет любители производительности, когда-то вел таблички в базе знаний с метрикам производительности. База знаний у нас была на Microsoft Sharepoint. Я учился в университете по направлению Интеллектуальные системы управления, онтологии и инженерия знаний. И фанател от Матрицы. А база знаний у нас в команде пустовала

И начал заполнять базу знаний метриками:
🤩как долго строится отчёт
🤩как долго делается поиск при разных параметрах
🤩как долго делается импорт
🤩сколько времени проходит между событиями в логах — 🤩 вот это была золотая жила метрик

По логам получались точные замеры, а менее точные делал через специальную программу-таймер

Тогда открыл для себя, что если просто открыть логи и внимательно посмотреть в них, то можно многое увидеть:
🤩что процесс начался в 08:30
🤩обработал 120 000 объектов
🤩завершился в 09:40

Значит:
🤩70 минут на 120000 объектов или 35 ms на объект для версии … и конфигурации …

И посмотреть в логи, увидеть там суть, записать данные, посчитать метрики, оценить их — это тоже замер и тест производительности

Тогда для меня это было открытием. И я до сих пор делаю тесты и замеры по логам. Если есть что-то фоновое и медленное — добавляю в код логи или прошу коллег добавить. А еще лучше с прогрессом:

08:30 - start
08:33 - 1000/120000
08:36 - 2000/120000
…
09:40 - 120000/120000
09:40 - finish

Читать полностью…

📢 Load & Performance

Пока собираются сборки, качаются репки и горят токены, поделюсь подходом к одной игре. Играю я в 📱Linkedin, цель игры — собрать много Connect-ов

Есть ограничения:

1️⃣ нажать кнопку Connect можно ограниченное количество раз, примерно 80 в неделю
2️⃣ в списках, таких как результаты поиска, не показывается отправлен ли Connect уже этому человеку, можно потратить Connect дважды
3️⃣ если открывать страницы в браузере, чтобы проверять не было ли уже отправки, то ваc признают ботом
4️⃣ если накопить много Connect-ов без ответов, то лимиты еще ниже 80-ти в неделю — например 10-20

Рекомендации, как играть в эту игру гласят, что стоит отправлять персонализированные приглашения и растягивать процесс на неделю

Но есть интересное скрытое ограничение:

5️⃣ многие пользователи не используют Linkedin, но учетные записи у них там есть — это мои коллеги, друзья, приятели, ... и докладчики с недавней конференции тоже

Поэтому, работает вот что:
🎚 играть в эту игру с теми кто комментирует и ставит реакции на интересные вам посты — это активные люди
🎚 пробовать писать свои, и смотреть кто отликнется на них

Если вы уже в бане, то можно нажать Follow на человека, который активен в интересующей вас теме:

🍀 высока вероятность что в ответ вам прилетит нужный Connect
✅ а ваша лента наполнится рекомендациями исходя из активностей людей, которые вам интересны

Например: найти сообщения по фразе Performance testing за неделю и Follow-ить авторов комментариев

Игра интересная, давайте играть вместе. Присылайте в комментариях ссылку на свой профиль, а вот мой:
https://www.linkedin.com/in/v8v/

Читать полностью…

📢 Load & Performance

Интересный был сегодня день — замедлились API запросы, запрофилировал, увидел что медленно работают запросы к базе данных. А запросы не менялись

И тут коллега говорит — смотри, сжатие файлов БД перестало работать

Причина медленной работы получилось из-за ошибки, из-за которой остановилось автоматическое сжатие (что-то типа auto vacuum), из-за остановки которого файлы данных с измеренными/удаленными записями стали содержать меньше нужных данных и больше ненужных, из-за чего поиск нужных данных замедлился. А чинится это запуском сжатия вручную один раз (что-то типа vacuum), после чего автоматическое сжатие снова работает

Читать полностью…

📢 Load & Performance

Прошел год и оно заработало!

Год назад начал маркировать тегами с именем api endpoint все дефекты по инцидентам. И делал это год, иногда каждый день, иногда раз в неделю — разбирал каждый скачок времени отклика

И вот уже две недели эти теги работают на меня — фильтрую по ним инциденты, а там уже все разобрано. Можно дополнять профилированием посвежее да и только

Ставить теги на задачи полезно

Читать полностью…

📢 Load & Performance

Пеку блины и читаю книгу "Производительность систем" (Брендан Грегг, 2023, Питер) — какая крутая книга. Я читал только предыдущее издание, и вот дошел до этой части, тут уже Ubuntu и eBPF

Однозначно рекомендую

Напишите в комментариях какие вы книги читали в этом году и рекомендуете ли их?

Читать полностью…

📢 Load & Performance

Ускоряем Allure.TestOps

Год назад работал над ускорением вот этой инсталляции
🕚https://qameta.io/our-customers/miro/
▶️3000 tests for each of the 400 pull requests being run every day
которая давала более 1млн новых launch за день

И делал доклад потом
🕚https://polarnik.github.io/Allure.TestOps.SpeedUp/slides.html
🕚https://www.youtube.com/watch?v=Bzs7cAweTLY

По результатам также появился вот этот раздел инструкции
🕚https://docs.qameta.io/allure-testops/install/database/#separating-connection-pools
▶️The analytics pool, if enabled, will be used for some of the read-only aggregated data queries. It is a common practice to use a separate database for analytics, with replication configured between the two databases.
Но честно говоря, именно для той инсталляции, нагрузка от аналитики не была такой огромной, что это требовало отдельной реплики.

Там нагрузка создавалась вставками и обновлениями в огромном количестве (1+ млн в день). А также запросами по API разных данных — интеграциями. И там хорошо помогло
🕚удалить некоторое количество индексов
🕚создавать partial-индексы только на новые данные, где launch >= ..., test_id >= ... — раз в неделю

Индексы все же были нужны, потому что свежие данные по API и через UI использовались. Но именно свежие

При этом удалять старые данные из системы было непроизводительно. Вот этот скрипт
🕚https://github.com/eroshenkoam/allure-testops-utils?tab=readme-ov-file#delete-launches-in-allure-testops
ставит много задач на удаление в очередь задач, а они тяжелые, тяжелее задач на выборку и вставку, поэтому если его запустить, то производительности конец. Его можно запускать по выходным. Если такие дни бывают у вашей системы. Но partial-индексы с фильтром по свежим id будут игнорировать все архивные записи, поэтому их наличие не будет сказываться на скорости

Читать полностью…

📢 Load & Performance

/channel/dive_memo

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

Читает и делает заметки в канал выше

Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где

Читать полностью…

📢 Load & Performance

Интересное наблюдение про файловую систему APFS, которая по умолчанию используется в MacOS

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

Возможно, это может нарушить логику некоторых инструментов, которые считают место на диске. Представьте, что есть диск на 100 Гбайт, но на нем 100 файлов по 90 ГБайт

Все это требует дополнительной проверки. Я проверял так

Запустил

iostat -w 2 disk0

и скопировал большой файл

При первом копировании заметил всплеск скорости записи
              disk0       cpu    load average
KB/t tps MB/s us sy id 1m 5m 15m
4.84 9658 45.69 14 17 69 17.06 15.92 12.23
11.66 2606 29.67 15 16 69 16.01 15.72 12.18
132.30 2220 286.83 10 16 74 16.01 15.72 12.18
226.11 1058 233.61 13 14 73 14.89 15.49 12.12
78.92 443 34.14 12 14 74 14.89 15.49 12.12
33.20 1178 38.20 12 16 73 13.94 15.28 12.07
42.61 1060 44.12 17 16 67 12.90 15.05 12.01

А потом повторил копирование, ожидая снова увидеть 233-286 MB/s, но ничего не увидел. Таким образом заподозрил, что копии 2 и больше были "бесплатные"

Посчитал место на диске df -h. Удалил копии 2 и больше и посчитал снова df -h — ничего не изменилось. Тогда удалил все файлы (тестовый файл был архив на 20 ГиБ) — вот тогда место освободилось

Читать полностью…

📢 Load & Performance

Неочевидная оптимизация Grafana досок для Thanos — добавить фильтр по label prometheus

Thanos это один из вариантов долговременного хранилища метрик Prometheus. И типичная архитектура такая, что Thanos один, а Prometheus-ов много. И я наивно полагал, что если выбрать один точный фильтр, то запрос будет быстрым. Оказалось, что если отфильтровать данные сначала по prometheus, а потом по имени сервера instance, то запрос получается быстрее, чем когда фильтрация происходит только по имени сервера

Примеры:

metric{instance="$instance"}
и
metric{prometheus="$prometheus", instance="$instance"}

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

Также довольно простое ускорение — увеличить $__interval для графиков. Например у вас отображается 2600 точек на графике, можно в свойствах панели (Query options) указать "Max data points" = 300 — это не очень мало, но довольно быстро

Читать полностью…

📢 Load & Performance

BSOD на Mac розовый 🩷

Отлаживаю тесты производительности локально, и так как на ноутбуке 64 гигабайта памяти, думал что смогу запустить и браузеры и среду разработки и контейнеры с системой и все все

Если запустить все все и запустить еще и нагрузку, так что и сервисы и тест начнут логи писать с огромной скоростью в консоль, то можно получить розовый экран и перезагрузку

Получил 🔤🔤🔤🔤 уже трижды, поэтому выключил все 🥰😌💻, оставил только Terminal — так работает отлично

Думаю что самой странной идеей было выставить лимит в 💻 на 500k строк в консоли с подсветкой, и запустить в трёх вкладках разные процессы, которые пишут логи неистово. И одновременно открыть дамп памяти на анализ

Интересно, что памяти хватало и процессора тоже. Запас был. Может быть дескрипторы файлов заканчивались или еще что-то

Читать полностью…

📢 Load & Performance

Сегодня собрал нагрузочный pipeline, где объект тестирования готовится с помощью Java Test Containers (Docker)

https://java.testcontainers.org/

TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения, запуск, остановка

Для всего остального есть Java. Если что-то не описано в документации библиотеки и не работает, то оно не заработает, скорее всего

Мне надо было обложить приложение разными агентами мониторинга. Агенты бывают для x64, arm64, musl, windows, … Я думал, что напишу в коде Dockerfile RUN IF … проверю переменные окружения и настрою то, что нужно. Это не работаем если контейнер собирает библиотека testcontainer, а не команда docker build

Если сделать слои и в каждом слое подготовить нужный агент, то команда копирования из слоя не работает для testcontainer

Но простая команда монтирования внешнего файла работает отлично. Поэтому всю сложную логику (какой агент выбрать, для какой архитектуры, …) делает Java, и потом монтирует нужный файл в оригинальный контейнер с приложением


Библиотека дала возможность сделать микро-стенды для тестов, которые на каждую сборку собираются в CI

⏺ в BeforeAll запустить небольшую систему и мониторинг к ней
⏺ в другом BeforeAll дождаться старта
⏺ нагрузить систему
⏺ проверить assertion-ы
⏺ в AfterAll все остановить и удалить

Читать полностью…

📢 Load & Performance

OnePager — стартовая точка для мониторинга, как продукта

Привет всем! Создаю, внедряю, применяю мониторинг производительности. И замечал, что мониторингом активно не пользовались

💡 Если подходить к мониторингу как к продукту, то такой продукт может начинаться с одной основной страницы, с которой пользователь может по ссылкам перейти на более детальные страницы

Создать такой one pager и провести онбординг пользователей для такой страницы — важная и не самая очевидная задача

Где-то такую страницу называют Иконостас. Это страница Grafana с отражением статусов и основными графиками:

🟦🟦🟥🟦
🟦🟥📉📈
📊📈🟦🟦
🟦🟦🟥🟦

Я пробовал создавать много досок с большим количеством графиков и таблиц:
📊📈📉📈
🗂📊📊📊
🗂📈🗓📉
Это сложно читать и она может медленно грузиться

Пробовал доски с интерактивными диаграммами:
🖼🖼🖼🖼
📊📈📉📈
🗓📉🗓📉
Это круто, но почти никто не кликает по частям диаграмм — это неочевидно, что они интерактивные и по ним можно кликать.

Пробовал создавать страницу только со статусами:
🟦🟦🟥🟦
🟦🟥🟥🟦
и ссылками на детали при клике по статусам. Но видимо не хватило разнообразия статусов на такой доске. На моей версии пока только статусы по загрузке страниц, и нет запросов или подсистем или системных метрик или транзакций или чего-то ниже уровнем, чем страницы. Такой высокий уровень, возможно, слишком высокий. И не хватает деталей

А самую популярную доску мониторинга в мире — Node Exporter Full
https://grafana.com/grafana/dashboards/1860-node-exporter-full/
не считаю удачным примером one pager-а. Она конечно умещается в одну страницу, но она довольно большая и сложная. Она изначально компактная за счет строк (row). Но если строки раскрыть, то там много деталей. Безусловно, такой формат распространения очень удачный — достаточно установить одну доску, и все сразу видно. Но добавляется сложность

⏺ Буду пробовать делать что-то между просто статусами со ссылками и большим количеством графиков
⏺ И попробую посмотреть, что пользователи делают на доске и что ждут от мониторинга. Пользователи — коллеги

Читать полностью…

📢 Load & Performance

Заметил что у YouTube канала появились подписчики, хотя там нет никаких обновлений. Вот авторы, подходы которых посмотрел, тут есть обновления:

AntonPutra">Anton Putra ⏺ 106 тыс. подписчиков ⏺ 274 видео

⏺ готовит в каждому видео тестовые стенды в AWS
⏺ бенчмарки на Go и Python к каждому видео https://github.com/antonputra/tutorials/tree/main/lessons
⏺ демонстрирует графики Grafana
⏺ использует анимированные слайды с темным фоном, на слайдах оставляет место в правом нижнем углу, чтобы потом вставить туда круг с видео
⏺ если показывает рабочий стол или среду разработки или браузер, то не накладывает кружок с видео на демо


ALifeEngineered">A Life Engineered ⏺ 177 тыс. подписчиков ⏺ 126 видео
⏺ делает много экспериментов
⏺ использует профессиональный звук и свет, так как занимался музыкой отдельно, использует профессиональное оборудование
⏺ использует полноразмерные слайды или слайды на половину экрана, использует разделение экрана на две равные части
⏺ использует сложный монтаж, где включает стоковое видео в ролик, собирает историю из кусочков стокового видео
⏺ возможно использует услуги специалиста по монтажу


james-willett">James Willett ⏺ 6,11 тыс. подписчиков ⏺ 46 видео
"ретроспективный" канал от создателя лучших курсов по Gatling:
⏺ можно видеть как 5 лет назад он использовал простой монтаж и только демонстрацию экрана
⏺ как два года назад он использовал маркерную доску и несколько камер с несложным монтажом
⏺ как он начал использовать screen.studio год назад


AlekOS">Alek OS ⏺ 279 тыс. подписчиков ⏺ 64 видео
⏺ использует много анимации и демонстрацию экрана
⏺ не использует видео с рассказчиком, использует только голос, демонстрацию экрана и анимацию


aocore">Лёша Корепанов ⏺ 224 тыс. подписчиков ⏺ 153 видео
⏺ иногда использует видео с собой но с разных локаций, которые склеивает в один рассказ
⏺ чаще использует видео из одной локации и позции
⏺ снимает на камеру
⏺ добавляет небольшие вставки с кодом или сайтами
⏺ не использует сложные анимации и эффекты


ScottMooreConsultingLLC">Software Engineering With Scott Moore⏺ 306 тыс. подписчиков⏺ 628 видео
⏺ использует какое-то популярное решение для записи demo, может быть camtasia или prezi для наложения слайдов на видео
⏺ использует хромокей и анимированный фон, анимированный фон его фишка
⏺ снимает на GoPro и не использует сложное оборудование и свет


FedericoTerzi">Federico Terzi⏺ 9,04 тыс. подписчиков⏺ 43 видео
⏺ использует несложный монтаж с borumi

Читать полностью…

📢 Load & Performance

Привет всем!

Готовлюсь записывать короткие видео и демо, связанные с производительностью. Раньше уже брался, но бросал. Поэтому сейчас нужен public commitment, надо пообещать что сделаю. Это обещания-пост. А начал с того, что пересмотрел набор инструментов для видео

Утилиты которые сейчас выбрал и проверил:
🎚 https://borumi.com/ — тут довольно просто разбить все на части и записать демо по частям, это 99% работы
🎚 https://www.capcut.com/ — чтобы добавить еще 1% в виде пары эффектов и акцентов, как 🔥⚡️💡❗️
Есть план укладываться в 4-5 часов при подготовке видео на 10 минут

Ранее использовал более профессиональные и сложные инструменты и тихонько отказываюсь от них:
🎚 https://obsproject.com/
🎚 https://www.blackmagicdesign.com/products/davinciresolve
Они мощные, но регулярную работу с ними я не освоил, дальше экспериментов не ушел

iMovie не очень мощный, чтобы записать и склеить видео можно
🎚 https://apps.apple.com/de/app/imovie/id377298193
🎚 screenshot + quicktime для видео
но потом внутренний перфекционист не дает покоя

Супер простой и популярный инструмент
🎚 https://screen.studio/
выбирать не стал, так как он очень популярный и узнаваемый, то что видео сделано в нем видно сразу, и это как-то лишало такое видео хардкорности

К ноябрю тут появится что-то новое:
📱 qaload" rel="nofollow">https://www.youtube.com/@qaload
А может не тут, но где-то рядом

Читать полностью…

📢 Load & Performance

Для удобства разработки тестов производительности настроил локальный тестовый стенд. Который может работать без сети. И в том числе pipeline настроил локально TeamCity Server + Agent, так вся разработка получилась в IDEA и как код

⭐️ Но получил ошибку в Idea с текстом, которая не позволяет работать с git

Error updating changes: [4804c71824c21b5c] unable to normalize alternate object path: /opt/buildagent/system/git/git-FFDF2529.git/objects


Как видно, в тексте ошибки говорится про git-объекты из каталога /opt/buildagent/system/, а текущий проект находится в каталоге разработки, в home (~), но не в opt. Почему Idea смотрит на каталог opt?

Причиной такого интереса IntelliJ IDEA к каталогу /opt/buildagent/system оказался файл .idea/vcs.xml

Какими-то действиями добавил туда каталог, в который выгружается этот же репозиторий при сборке

⭐️ Способ починить Idea - удалить лишнюю строку 5 из файла .idea/vcs.xml

Репозиторий в каталоге Build Agent сломался потому что для агента он находится по адресу host.docker.internal, который недоступен локально, и там работа идет с веткой otel, которая есть не во всех внешних git-репозиториях, подключенных к проекту

💬 Иногда коллеги по нагрузке рассказывают про ожидания доступов до начала работы над проектом
💡 Можно практиковать развертывание локального окружения c CI/CD, Grafana и git (тоже можно поднять локально)
⭐️ Могут возникнуть ошибки, но они решаемые
⭐️ А такой проект несложно перенести на другое окружение при получении доступов

Читать полностью…

📢 Load & Performance

Есть в профилировании JVM сложная задача — посчитать количество итераций в каждой строке за счет наложения на данные семплирующего профайлера (Sampling) данные трассировки (Tracing) и подсчета количества выполнений (Call counting)

Режим Sampling
дает самые меньшие искажения и почти незаметен для профилируемого сервиса, по нему можно понять, что какая-то строка кода выполняется, например, 60% времени

По данным семплирования удобно строить Flame диаграммы, как на скриншоте

И данная строка может быть горячей по разным причинам:
🤩медленная операция которая потребляет CPU
🤩выделяет память
🤩походы на диск
🤩походы по сети
🤩и может быть это супер быстрый код, но который вызывают 1 000 000 раз в цикле

Вот в этом последнем варианте причина медленной работы в том методе который вызывает данный метод 1 000 000 раз

Это довольно частый случай. А технически задача становится такой:
🤩собрать статистику по количеству выполнений методов
🤩наложить статистику с количеством на данные семплирования

Сбор статистики по количеству выполнений бывает двух видов
🤩без номеров строк и вышестоящих запросов (Call Counting) — быстрый
🤩с номерами строк (Tracing) — медленный

В Call Counting попадают абсолютно все вызовы данного метода, и если метод — это некий популярный интерфейс, как EntityIteratorBase.hasNext, то по нему будут миллионы вызовов в статистике, даже если в профилируемой операции он вызывался 10 000 раз только. Обычно такие методы в начале или середине стека. Они есть при каждом HTTP-запросе и каждой операции и Call Counting покажет для них очень высокие значения.

Но вот для уникальных строк в конце стек-трейса, таких как Delegator.checkPage (вершина Flame graph), Call Counting будет работать очень точно. Он покажет точные значения. Потому что чаще всего это узкое место уникально для этого запроса. А еще будут точные значения про метод который вызывал этот метод. И может быть про предыдущий

Как понять, что числа в Call Counting более менее настоящие

Например, смотрим на метрики сверху вниз

🤩DataIterator.checkPage — 27 000 000 вызовов
🤩PatriciaTreeBase.getDataIterator — 5 000 000 вызовов (такое может быть, этот метод вызывает checkPage примерно по 5-6 раз)
🤩PatriciaTreeBase.getLoggable — 5 000 000 вызовов (такое может быть, он вызывает getDataIterator только один раз)
🤩PatriciaTreeBase.loadNode — 5 000 000 (ok)
🤩ChildReference.getNode - 1 600 000 (этот вызывает loadNode 3 раза)
🤩PatriciaTraverser.moveDown — 80 000 000

Тут я выдумал число 80 000 000 для сокращения, но если вдруг количество по вышестоящему методу резко выроcло, а не упало — то это означает, что дальше метрикам Call Counting верить нельзя. Они свое отработали, показали для методов нижнего уровня сколько вызовов приходится на следующий:
🤩x5, x1, x1, x1, x3, x???

Дальше можно продолжать разматывать стек, но уже держа в голове, что это замусоренные данные.

И в какой-то момент придется переключиться на данные трассировки. Это самые неточные данные. Трассировка хоть и самая детальная, но вносит столько изменений и замедлений в код, что часто выполнение кода становится уже неполным (завершается по таймауту) или искаженным. Она покажет неполные данные — например скачок в x218208 на данных трассировки в реальности может быть и скачком в x1000000, но код просто не дожил то итерации в 1 000 000 и прервался на 218208. Но это лучшая оценка

Все такие множители удобно записывать в виде комментариев к строкам стек-трейса — просто через //

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

Читать полностью…

📢 Load & Performance

Сегодня взял небольшой отпуск и пошёл в кафе в горах почитать, просмотреть, покушать. В некоторых горах есть кафе!!! Да, надо добраться сюда, но …

🤩🤩🤩🤩🤩🤩🤩🤩🤩

Нагрузочных историй пока нет, но нашел вот эмоджи интересные

🤩🤩❤❤❤❤❤❤❤

Можно ими порадовать близких

❕❕❕❕

Узнал, что если рассматривать мозг как мышцу, то ему нужен отдых, минут 🤩🤩 в течение дня в тишине или на природе и 🤩🤩🤩 ночью — тогда он будет расти

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

〰️〰️〰️〰️〰️〰️〰️〰️

Еще подумал, что данный канал выглядит для вас не как summary чата нагрузки, а как дневник одного человека. Может переименовать в дневник

Читать полностью…

📢 Load & Performance

Прочитал новости про закат StackOverflow как площадки, где эксперты отвечали на вопросы. Вопросы теперь задаются не экспертам, а чатам с моделями, натренированными на StackOverflow

В чате qa_load вопросов тоже не так чтобы много, потому-то модели ответят быстрее, чем люди в чате

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

Возможно следующая версия чатов будет представлять из себя именные топики для общения с нужным человеком, но публично, плюс общий чат, в котором умные модели с нужным контекстом, ответят на вопросы

Читать полностью…

📢 Load & Performance

Привет performance lovers! Вы когда-нибудь участвовали в выборе хостинга, сервиса, продукта в вашей компании. Например, в рамках технического комитета, где надо было оценить варианты с точки зрения производительности

Производительность, наблюдаемость, доступность — те характеристики, на которые могу повлиять в YouTrack, и влияю уже год. Считаю, что прогресс существенный. А вот когда клиенты выбирают продукты, то как решения принимаются?

✨Оценка делается на основе статей и мнения разработчиков решения?
✨Оценка на основе мнения экспертов из индустрии?
✨Оценка делается исходя из того, что друзья/партнеры/конкуренты используют это решение?
✨Независимая экспертиза и услуги консалтеров?
✨Внутренняя оценка, и делаются сравнительные тесты, внутренние пилоты?
🎄или не играет большой роли производительность

🍪 Поделитесь мыслями или своим опытом. Можно в личные сообщения @smirnovqa

❤ Всем отличной субботы, а тем у кого уже воскресенье — отличного воскресения

Читать полностью…

📢 Load & Performance

Оказалось, что больше всего в этом году смотрел Heisenbug на YouTube

Иногда это были доклады, на которых был, но хотелось вспомнить детали

Иногда это были просто интересные материалы

Буду очень рад новым мастер-классам и докладам по мониторингу и производительности весной. Да и не я один. Отправляете свои материалы ☺️. Просто идеи бывает сложно конвертировать в отличный материал, а MVP довести до прода — одно удовольствие

Весной будет юбилей конференции. Будет здорово!

Читать полностью…

📢 Load & Performance

Вчера был международный день гор — 11 декабря ⛰🏔🌋

Почему это важно для меня? Мои путешествия начались с горного туризма.

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

Заниматься инженерией и производительностью круто. Но если сложно ответить на вопрос, а кто же я, без использования названия компаний, то можно сходить в поход или домой поехать. А почему стоит посмотреть на горы? В горном походе хорошо то, что комаров мало и красиво как нигде.

Читать полностью…

📢 Load & Performance

Поставил себе openjdk 25 через

brew install openjdk@25

Это обновило мне openjdk@24 до 25, удалив 24. И потребовало починить запуск VisualVM https://visualvm.github.io/

Чтобы починить поставил openjdk@21, выдал права приложению Terminal на доступ к каталогу /Application в Privacy & Security / App Management / Terminal

И указал для VisualVM кастомный путь к JDK через команду в Terminal:

echo visualvm_jdkhome="/opt/homebrew/Cellar/openjdk@21/21.0.9/libexec/openjdk.jdk/Contents/Home" >> /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf

Починилось!

Но openjdk в любом случае крутое обновление. Трассировка вызовов понравилась

Если пропустили workshop "Работа с JDK Flight Recorder из командной строки" от Алексея Рагозина, то можно посмотреть инструкцию и запись вот тут https://training.ragozin.info/ru/webinars/2025-11-JFR-CLI/workshop.html и поделиться потом обратной связью https://forms.gle/VDtmEd85oKTNht4X6 с Алексеем

Читать полностью…

📢 Load & Performance

Docker desktop обновился до последней версии. Но я в файле libraries.gradle не обновил версию библиотеки-клиента org.testcontainers:testcontainers . И Java Test Containers версии 1.21.1 (последняя версия из ветки 1) перестала подключаться к Docker. Так как нет ни одного дефекта про это, то я думал что у меня что-то не так. А причина была в том, что надо обновлять и бибилиотеку тоже до 2.0.2

Спонсор потерянного дня — старая версия библиотеки 🤦‍♂️

Ошибки были вот такие
[Test worker] ERROR org.testcontainers.dockerclient.DockerClientProviderStrategy - Could not find a valid Docker environment. Please check configuration.

🔴 И любые настройки не помогали для Docker Desktop 4.53.0, пока не обновился до testcontainers-java 2.0.2
🟠 Для предыдущей версии 4.52.0 помогало переключиться с docker context docker-linux на docker context default командой
docker cotext use default
🟢 А для версии Docker Desktop 4.51.0 просто работала библиотека testcontainers-java 1.21.1

Версии testcontainers: https://github.com/testcontainers/testcontainers-java/releases
Версии docker-desktop: https://docs.docker.com/desktop/release-notes/

Читать полностью…

📢 Load & Performance

Три доклада и десять разговоров за конференцию

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

Я интроверт и начал активно ходить и выступать на конференциях с 2018 года. За семь лет прошёл путь от 🪫стресса до 🔋заряжения от митапов и конференций

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

А когда-то пробовал посетить максимум событий программы и мало общался. Думал не упустил ли что-то, а еще слушал комментарии других посетителей, они почти всегда были критическими. Это было время стресса

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

🔋И так постепенно пришел к балансу того, чтобы посетить несколько докладов, постараться заранее найти интересных мне людей и поговорить с ними во время конференции. Это давало большой прилив энергии и идей. С фокусом и общением

Читать полностью…

📢 Load & Performance

Вот так программировали французские короли. У окна. Удобное кресло. Подставка под монитор и видвижная платформа с удобным наклоном для набора кода

А как выглядит ваше рабочее место?

Читать полностью…

📢 Load & Performance

Grafana / Inspect / Query / Refresh позволяет перезагрузить одну панель на доске Grafana

Привет всем! Бывало такое, что у вас не загружается доска Grafana и показывает пустую панель со значком предупреждения вверху ⚠️? А минуту назад все работало. Или бывало что часть панелей загрузилась, а часть показывают предупреждение?

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

💡 В контекстном меню каждой панели можно найти пункт Inspect / Query, где будет кнопка Refresh, для перезагрузки только текущей панели. Это можно делать несколько раз, пока панель не загрузится успешно

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

Большинство хранилищ метрик и логов доступны по HTTP и подключаются к Grafana по HTTP. Поэтому можно выставить вместо цепочки:
⏺ Grafana => Хранилище
Цепочку:
⏺ Grafana => Nginx => Хранилище

Так для InfluxDB использовал Nginx вот с такой конфигурацией:
⏺ https://gist.github.com/polarnik/cb6f22751e8d1590342198609243c529

Тут ключевые настройки были такие

Кеш на 20 минут в секции http { ... } :
⏺ proxy_cache_path /data/nginx/cache keys_zone=mycache:20m max_size=1g inactive=60m;

Указание этого кеша в http { server { location /query { ... } } } :
⏺ proxy_cache mycache;
⏺ proxy_cache_key "$host-$request_method-$request_uri";
⏺ proxy_cache_min_uses 1;
⏺ proxy_cache_methods GET;
⏺ proxy_ignore_headers Cache-Control;
игнорирование настроек кеширования от самого хранилища метрик тут обязательно, хранилище метрик будет говорить, что кешировать ответ не надо. Но если выбрать статический интервал времени:
⏺ 00:00:00 ... 12:00:00
но не динамический:
⏺ now-12h ... now
то кеширование будет успешно работать, потому что request_uri не изменится

Если хранилище метрик подключено к Grafana через POST-метод, то тогда в настройках кеширования можно указать:
⏺ proxy_cache_key "$host-$request_method-$request_uri-$request_body";
⏺ client_body_in_single_buffer on;
⏺ client_body_buffer_size 64k;
⏺ proxy_cache_methods GET POST;

Так как Nginx не будет выполнять авторизацию доступа к данным из кеша, то надо будет настроить Firewall так чтобы только IP-адрес Grafana Server имел доступ до Nginx Proxy. В этом случае авторизацию выполняет Grafana, и пользователи имеющие доступ до хранилища метрик там будут иметь доступ и кешу

Читать полностью…

📢 Load & Performance

Знаете ли вы, что некоторые инструменты профилирования сделаны почти в одиночку или очень малой командой?

Привет всем! Часто использую инструменты профилирования JVM, иногда завожу дефекты или разбираюсь в исходном коде инструментов, и так ближе знакомлюсь с создателями, и заметил вот такую особенность — команды проектов небольшие

💡 Если есть мысли сделать инструмент для себя, то можно начать в одиночку и даже развить проект до коммерческого продукта

Некоторые оценки размеров команд:

⏺YourKit Java Profiler поддерживается примерно тремя людьми, но это не точно
⏺ JProfiler поддерживался одним человеком (я пока только один контакт нашел)
⏺ jvm-tools/sjk активно поддерживается одним человеком, на github есть 26 участников проекта
⏺ AsyncProfiler судя по коммитам создавался двумя инженерами, потом долго-долго поддерживался одним инженером, и теперь в разработке участвуют 4 человека
⏺ VisualVM активно разрабатывается тремя инженерами, но всего 7 участников на github
⏺ Java Mission Control, где JFR используется как бекенд, активно разрабатывали около 20 человек, и 49 участников проекта есть на github
⏺ Grafana Pyroscope или Pyroscope, где AsyncProfiler используется как бекенд, имеет более 10 активных разработчиков и 221 участников на github


Некоторые источники:
⏺YourKit Java Profiler: https://www.yourkit.com/forum/ — посмотрел на тех, кто отвечает на вопросы, заглянул в контакты на сайте и на linkedin
⏺ JProfiler: https://www.ej-technologies.com/company — посмотрел на контакты и на linkedin
⏺ jvm-tools/sjk: https://github.com/aragozin/jvm-tools/graphs/contributors оценил по github
⏺ AsyncProfiler: https://github.com/async-profiler/async-profiler/graphs/contributors
⏺ VisualVM: https://github.com/oracle/visualvm/graphs/contributors
⏺ Java Mission Control: https://github.com/openjdk/jmc/graphs/contributors
⏺ Grafana Pyroscope: https://github.com/grafana/pyroscope/graphs/contributors

Читать полностью…

📢 Load & Performance

А по sitespeed будешь пилить?

Читать полностью…

📢 Load & Performance

Привет всем!

Встречался вчера с любителями Grafana на митапе Grafana & Friends Berlin

Рассказывал и показывал разные способы автоматизации анализа досок с метриками

Демонстрация на слайдах не очень отражена, но основные идеи тут изложил

https://polarnik.github.io/grafana-analysis-automation/

Буду рад вопросам

Читать полностью…

📢 Load & Performance

Привет любители производительности!

Этот канал был задуман, как канал со ссылками на обсуждения в чате qa_load. Это было важно, когда в Telegram не было подчатов, был только один чат General и надо было как-то группировать сообщения из General. Потом в Telegram появились подчаты и текущий канал qaload был отвязан от qa_load

И вот сегодня @qa_load дорос до четырех девяток ⭐️⭐️⭐️⭐️ или четырех нулей *️⃣*️⃣*️⃣*️⃣

Случилось это 18 апреля 2025-го года, спустя 2354 дня после старта

qa_load был стартован Сашей, как отдельный раздел про нагрузку, отдельный от @qa_automation

Рос qa_load со средней скоростью ~ 4.25 новых участников в день. И этот график роста линейный, идеально прямая линия. С первого дня до текущего момента (на таком масштабе в 2354 дня) линия прямая.

Долгое время в чате не было статистики и в Telegram ее не было. И появилась традиция дарить машину или мотоцикл или самолет или поезд на круглое число, например, подарить автомобиль у которого двигатель крутится со скоростью 8000 оборотов в минуту 8000-му человеку. А потом эти посты собирались в эту прямую линию, в них была дата и количество. И, конечно же, людям приятно 💛

Еженедельно его просматривает 215-230 любителей производительности

Постоянно команда ботов и админов следят за качеством дискуссий. Самый главный бот самописный, его Саша написал и поддерживает

Иногда бывает реклама. Я как-то вел учет, и пока его вел было заработано 1700 рублей (кажется) или $20. И это было каждый раз сложно. А вот делать бартер было несложно, бартер на билеты или еще на что-то, что можно бы было сразу потратить. И в какой-то момент все перешло на бартер

В чате можно найти около 6 розыгрышей билетов на разные конференции (я столько вспомнил, может неточное число)

Затрудняюсь сказать сколько стоит инфраструктура вокруг чата. Думаю около $250 в год и еще время 200+ человек каждую неделю

У меня профессиональная деформация, люблю числа и графики. Спасибо за Ваш вклад в числа и графики описанные выше 🤗

Читать полностью…
Subscribe to a channel