📢 Load & Performance
877 subscribers
33 photos
3 files
99 links
Избранные материалы о тестировании производительности.
Чат и источник тем: @qa_load
Download Telegram
Три доклада и десять разговоров за конференцию

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

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

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

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

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

🔋И так постепенно пришел к балансу того, чтобы посетить несколько докладов, постараться заранее найти интересных мне людей и поговорить с ними во время конференции. Это давало большой прилив энергии и идей. С фокусом и общением
Please open Telegram to view this post
VIEW IN TELEGRAM
11
Неочевидная оптимизация 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 — это не очень мало, но довольно быстро
Viacheslav Smirnov
Сегодня собрал нагрузочный pipeline, где объект тестирования готовится с помощью Java Test Containers (Docker) https://java.testcontainers.org/ TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения…
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/
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Интересное наблюдение про файловую систему 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 ГиБ) — вот тогда место освободилось
Поставил себе 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 с Алексеем
https://t.me/dive_memo

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

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

Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где
👍5
Вчера был международный день гор — 11 декабря 🏔🌋

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

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

Заниматься инженерией и производительностью круто. Но если сложно ответить на вопрос, а кто же я, без использования названия компаний, то можно сходить в поход или домой поехать. А почему стоит посмотреть на горы? В горном походе хорошо то, что комаров мало и красиво как нигде.
🔥5👍32
Ускоряем 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 будут игнорировать все архивные записи, поэтому их наличие не будет сказываться на скорости
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Оказалось, что больше всего в этом году смотрел Heisenbug на YouTube

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

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

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

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

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

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

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

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

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

Всем отличной субботы, а тем у кого уже воскресенье — отличного воскресения
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Прошел год и оно заработало!

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

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

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

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

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

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

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

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

🤩🤩🤩🤩🤩🤩🤩🤩🤩

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

🤩🤩

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



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

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

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

Еще подумал, что данный канал выглядит для вас не как summary чата нагрузки, а как дневник одного человека. Может переименовать в дневник
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12