[Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

https://habr.com/ru/companies/spring_aio/articles/1019086/

#jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

Раздувание памяти JDK 17 в контейнерах: разбор инцидента

В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать....

Хабр

[Перевод] OpenTelemetry со Spring Boot

В новом переводе от команды Spring АйО смотрим, как подружить современный Spring Boot и OpenTelemetry так, чтобы данные уходили по OTLP в любой совместимый бэкенд. В экосистеме Spring большая часть телеметрии была завязана на Micrometer Project (Был ещё spring-cloud-sleuth если кто помнит). Но полноценного all-in-one решения для того, чтобы Spring Boot приложение просто начало экспортировать телеметрию по OTLP не было. До Spring Boot 4. На данный момент для интеграции OTel в Spring Boot приложения есть 3 пути: Java Agent (минимум кода, но чувствителен к версиям и может конфликтовать с другими агентами), сторонний OTel starter (стартер от самих OpenTelemetry, но тянет alpha-зависимости) и новый spring-boot-starter-opentelemetry , доступный в Spring Boot 4.0. Про него и будет речь.

https://habr.com/ru/companies/spring_aio/articles/1017016/

#java #kotlin #spring #opentelemetry #performance #springboot #spring_framework #spring_boot

OpenTelemetry со Spring Boot

В новом переводе от команды Spring АйО смотрим, как подружить современный Spring Boot и OpenTelemetry так, чтобы данные уходили по OTLP в любой совместимый бэкенд.  В экосистеме Spring большая...

Хабр

[Перевод] Spring Data. На пути к более строгой типизации

В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

https://habr.com/ru/companies/spring_aio/articles/1014920/

#spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

Spring Data. На пути к более строгой типизации

В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data...

Хабр

Уязвимости в Spring AI и ONNX: как дыры в ИИ‑фреймворках превращаются в утечки данных и чужие модели

ИИ‑фреймворки давно въехали в прод, но к ним часто относятся как к «научной приблуде», а не к ещё одному входу в ваши данные и инфраструктуру. Spring AI и ONNX крутятся где‑то между ML‑командами, продуктами вендоров и внутренними ассистентами, и на определённом этапе за ними перестают успевать архитектура и безопасность. В марте в обзорах уязвимостей рядом всплыли несколько критичных багов именно в этих штуках. Там есть и SQL‑инъекции, и JSONPath‑инъекции, и обход проверки доверия при загрузке моделей. В статье разбираю, что это значит для тех, кто уже тащит ИИ в прод, и даю чек‑лист, который можно прямо отнести своей команде.

https://habr.com/ru/articles/1014606/

#onnx #spring #spring_framework #spring_security #cve #vulnerability #vulnerability_management #уязвимости #уязвимости_и_их_эксплуатация #уязвимость_нулевого_дня

Уязвимости в Spring AI и ONNX: как дыры в ИИ‑фреймворках превращаются в утечки данных и чужие модели

TL;DR В марте нашли критичные уязвимости в Spring AI и ONNX. В Spring AI всплыли SQL‑инъекции и JSONPath‑инъекции в сценариях работы с БД и данными. В ONNX можно обойти проверку доверия при загрузке...

Хабр

[Перевод] О размерах пула соединений

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

https://habr.com/ru/companies/spring_aio/articles/1011770/

#java #kotlin #connection_pool #system_design #system_development #system_designer #spring #spring_boot #spring_framework #postgres

О размерах пула соединений

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

Хабр

conditionals-spring-boot: расширяем возможности @Conditional

Написал небольшую библиотеку для Spring Boot, которая добавляет типизированные @Conditional -аннотации для работы с конфигурацией через Environment...

https://habr.com/ru/articles/1008018/

#java #spring #spring_boot #spring_framework #springboot #configuration #configuration_management

conditionals-spring-boot: расширяем возможности @Conditional

В мире Spring Boot почти каждый сталкивался с аннотациями @ConditionalOnProperty , @ConditionalOnBean и их собратьями. Они помогают конфигурировать бины динамически, но стандартные условия это только...

Хабр

[Перевод] Ceylon и NULL: как сделать null нормальным

В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения. В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО .

https://habr.com/ru/companies/spring_aio/articles/1001982/

#java #kotlin #ceylon #jvm #spring #spring_boot #spring_framework

Ceylon и NULL: как сделать null нормальным

В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения. В Ceylon эту проблему решают через типовую...

Хабр

[Перевод] Руководство по ArchUnit — как модульно тестировать архитектуру

Соблюдение определённой структуры пакетов или архитектуры крайне важно. Особенно в Java, где для корректной работы некоторые элементы должны быть public или действительно доступны за пределами своего пакета. В новом переводе от команды Spring АйО рассмотрим библиотеку с открытым исходным кодом ArchUnit, которая помогает в тех случаях, когда одного компилятора недостаточно.

https://habr.com/ru/companies/spring_aio/articles/1001486/

#java #kotlin #archunit #тестирование #testing #test #spring #spring_boot #spring_framework

Руководство по ArchUnit — как модульно тестировать архитектуру

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

Хабр

[Перевод] Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)

Records, pattern matching и sealed-типы сделали Java куда более «функциональной» — читать вложенные данные стало легко и красиво. Но как только вам нужно изменить что-то глубоко внутри неизменяемой структуры, начинается боль: каскад пересоздания records, копирование полей, десятки строк ради одного изменения. В новом переводе от команды Spring АйО рассмотрим, почему у современной Java всё ещё есть пробел в истории неизменяемости — и как оптики закрывают его. Если pattern matching — это про элегантное чтение , то оптики дают то, чего так не хватает, — композиционную запись : определили путь один раз и дальше меняете вложенные поля одной строкой, без ручной реконструкции и без циклов.

https://habr.com/ru/companies/spring_aio/articles/1001066/

#java #kotlin #jvm #optics #java_core #spring #spring_framework #spring_boot

Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)

Records, pattern matching и sealed-типы сделали Java куда более «функциональной» — читать вложенные данные стало легко и красиво. Но как только вам нужно изменить что-то глубоко внутри неизменяемой...

Хабр

[Перевод] Программирование, ориентированное на данные, для Java: за пределами record-классов

Record-классы удобны, пока класс = «состояние, всё состояние и ничего кроме». Любое отклонение (API канонического конутруктора не равно внутреннему представлению, нужно наследование) ломает «автогенерацию» и паттерн-деструктурирование (destructuring). В новом переводе от команды Spring АйО статьи Brian`а Goetz`а, архитектора Java Language, предлагается следующий шаг в направлении data-oriented programming in Java: классы-носители и интерфейсы-носители (они же Carrier classes & interfaces). Концептуально, carrier классы родились из record-ов путем ослабления части их ограничений. Комментарий от Михаила Поливаха : Друзья, помните, пожалуйста, что данная статья по сути является суммированием обсуждения Carrier классов из JDK Project Amber Mailing List. Я это к тому, что пока непонятно, в какой версии языка carrier классы появятся, и появятся ли они в том виде, в котором представлены в статье. Статью стоит рассматривать как пищу для размышления.

https://habr.com/ru/companies/spring_aio/articles/995824/

#java #jvm #kotlin #jvm_options #jvm_hacks #spring #spring_boot #spring_framework

Программирование, ориентированное на данные, для Java: за пределами record-классов

Record-классы удобны, пока класс = «состояние, всё состояние и ничего кроме». Любое отклонение (API канонического конутруктора не равно внутреннему представлению, нужно наследование) ломает...

Хабр