Сегодня собрал нагрузочный pipeline, где объект тестирования готовится с помощью Java Test Containers (Docker)
https://java.testcontainers.org/
TL;DR; Простые варианты использования в Java Test Containers работают — монтирование файлов, переменные окружения, запуск, остановка
Библиотека дала возможность сделать микро-стенды для тестов, которые на каждую сборку собираются в CI
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 все остановить и удалить
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
BSOD на Mac розовый 🩷
Отлаживаю тесты производительности локально, и так как на ноутбуке 64 гигабайта памяти, думал что смогу запустить и браузеры и среду разработки и контейнеры с системой и все все
Если запустить все все и запустить еще и нагрузку, так что и сервисы и тест начнут логи писать с огромной скоростью в консоль, то можно получить розовый экран и перезагрузку
Получил🔤 🔤 🔤 🔤 уже трижды, поэтому выключил все 🥰 😌 💻 , оставил только Terminal — так работает отлично
Думаю что самой странной идеей было выставить лимит в💻 на 500k строк в консоли с подсветкой, и запустить в трёх вкладках разные процессы, которые пишут логи неистово. И одновременно открыть дамп памяти на анализ
Интересно, что памяти хватало и процессора тоже. Запас был. Может быть дескрипторы файлов заканчивались или еще что-то
Отлаживаю тесты производительности локально, и так как на ноутбуке 64 гигабайта памяти, думал что смогу запустить и браузеры и среду разработки и контейнеры с системой и все все
Если запустить все все и запустить еще и нагрузку, так что и сервисы и тест начнут логи писать с огромной скоростью в консоль, то можно получить розовый экран и перезагрузку
Получил
Думаю что самой странной идеей было выставить лимит в
Интересно, что памяти хватало и процессора тоже. Запас был. Может быть дескрипторы файлов заканчивались или еще что-то
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Три доклада и десять разговоров за конференцию
Если вы посещаете конференции и думаете, какой доклад или мастер-класс посетить, то мой опыт с фокусом на несколько докладов, вопросами и беседами может пригодиться
Если вы посещаете конференции и думаете, какой доклад или мастер-класс посетить, то мой опыт с фокусом на несколько докладов, вопросами и беседами может пригодиться
Я интроверт и начал активно ходить и выступать на конференциях с 2018 года. За семь лет прошёл путь от 🪫 стресса до 🔋 заряжения от митапов и конференций
Если коротко, то стал ставить себе цель посетить лишь два-три доклада даже на двухдневной конференции с программой на несколько десятков событий, но зато поговорить с большим количеством людей, послушать, обсудить, познакомиться, позавтракать, поужинать, покодить
А когда-то пробовал посетить максимум событий программы и мало общался. Думал не упустил ли что-то, а еще слушал комментарии других посетителей, они почти всегда были критическими. Это было время стресса🔔 Первый прилив энергии ощутил от вопросов. Я задавал вопросы, даже старался к каждому выступлению, все больше и больше и чувствовал что так мне нравится все больше и больше. Вопросы становились поводами для общения между докладами 🔋 И так постепенно пришел к балансу того, чтобы посетить несколько докладов, постараться заранее найти интересных мне людей и поговорить с ними во время конференции. Это давало большой прилив энергии и идей. С фокусом и общением
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11
Неочевидная оптимизация Grafana досок для Thanos — добавить фильтр по label
prometheusThanos это один из вариантов долговременного хранилища метрик 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 ГБайт
Все это требует дополнительной проверки. Я проверял так
Запустил
и скопировал большой файл
При первом копировании заметил всплеск скорости записи
А потом повторил копирование, ожидая снова увидеть
Посчитал место на диске
Если скопировать файл в пределах одного диска, то копия не занимает места, это ссылка с другим именем. Если удалить копию, то место также не освобождается
Возможно, это может нарушить логику некоторых инструментов, которые считают место на диске. Представьте, что есть диск на 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 через
Это обновило мне openjdk@24 до 25, удалив 24. И потребовало починить запуск VisualVM https://visualvm.github.io/
Чтобы починить поставил
И указал для VisualVM кастомный путь к JDK через команду в
Починилось!
Но openjdk в любом случае крутое обновление. Трассировка вызовов понравилась
Если пропустили workshop "Работа с JDK Flight Recorder из командной строки" от Алексея Рагозина, то можно посмотреть инструкцию и запись вот тут https://training.ragozin.info/ru/webinars/2025-11-JFR-CLI/workshop.html и поделиться потом обратной связью https://forms.gle/VDtmEd85oKTNht4X6 с Алексеем
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
Рекомендую уютный канал Михаила с ценными заметками про производительность. Он сейчас делает перфоманс аналитику по облаку для анализа данных
Читает и делает заметки в канал выше
Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где
Рекомендую уютный канал Михаила с ценными заметками про производительность. Он сейчас делает перфоманс аналитику по облаку для анализа данных
Читает и делает заметки в канал выше
Познакомились мы с ним недавно. А вы, может, с ним знакомы уже и работали вместе в ПерфЛабе, Яндексе или еще где
Telegram
struct dive_memo
Dump of thoughts after readings
Author: @epikhinm
Author: @epikhinm
👍5
Вчера был международный день гор — 11 декабря ⛰🏔🌋
Почему это важно для меня? Мои путешествия начались с горного туризма.
И там я впервые понял, что я не нагрузочник и не сотрудник компании, я был просто собой и людям вокруг было важно чтобы был верный маршрут, починенные вещи, приятная компания. А до походов я почти всегда был инженером, кроме тех дней когда я был дома
Заниматься инженерией и производительностью круто. Но если сложно ответить на вопрос, а кто же я, без использования названия компаний, то можно сходить в поход или домой поехать. А почему стоит посмотреть на горы? В горном походе хорошо то, что комаров мало и красиво как нигде.
🔥5👍3❤2
Ускоряем 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 довести до прода — одно удовольствие
Весной будет юбилей конференции. Будет здорово!
Иногда это были доклады, на которых был, но хотелось вспомнить детали
Иногда это были просто интересные материалы
Буду очень рад новым мастер-классам и докладам по мониторингу и производительности весной. Да и не я один. Отправляете свои материалы ☺️. Просто идеи бывает сложно конвертировать в отличный материал, а MVP довести до прода — одно удовольствие
Весной будет юбилей конференции. Будет здорово!
🔥13