Pull to refresh

Comments 9

Имхо удобнее использовать -XX:+UseContainerSupport -XX:MaxRAMPercentage=60.0 вместо Xms/Xmx. Автоматом от лимитов пода (лимитов cgroup) будет вычислятся heap.

-XX:+UseContainerSupport вроде с java 10 вроде включен по умолчанию, согласен в этом есть удобство но с -XX:MaxRAMPercentage был ньюанс, насколько я помню он сильно зависит от того с какими параметрами куб создает контейнер и соотвественно задаются cgroups, у нас поэтому эта настройка не взлетела так как MaxRam определялся не совсем корректно, причины были с кубом сходу не вспомню. Но спасибо за уточнение, при корректном определении способ для хипа рабочий

Смысл статьи в том, чтобы показать,
что Java запускается в jvm и оказывается,
саму jvm необходимо настраивать?

моё почтение.

Спасибо за разбор!

Недавно командой сталкивались с двумя кейсами в реактивном сервисе c WebFlux и Netty в Kubernetes:

  • реактивный клиент для редиса съедал весь direct buffer (возможно мы не совсем корректно его использовали), размер которого по умолчанию равен heap и долго не могли понять откуда берется OOMKilled, так как не мониторили non-heap и в частности direct memory

  • кол-во netty потоков росло более 2к, а с учетом того что по умолчанию на стек потока выдается 1024к также ловили OOMKilled

И поняли, что просто так с ходу, не разбираясь в деталях работы успешно развертываться в Kubernetes невозможно, но когда все настроено, то красота!

Еще в документации предупреждают, что включенный Native Memory Traking потребляет до 15% процессорного времени, поэтому на Prod его нельзя включать.

Про стек потока, кстати, на большинстве наших сервисов, как показала практика, можно смело ставить 512К. Про реактивный клиент к редису - сами не сталкивались с таким, но возьмем тоже на заметку. Спасибо за комментарий!

Это максимальный размер стэка. Если такой размер не нужен память потребляться не будет.

Спасибо что подняли этот вопрос дали и решение. Обязательно сохраню в закладки. Точно пригодится.

Спасибо за статью могу спросить как вы собираете проекты через JIB в CI/CD ? перед деплоем тянете образ jdk c gradle/maven и билдите в container registry ? Я попробовал добавить его к себе, разницу увидел только в размере сборке (похудела на 50mb), а вот в скорости прирост незначительный

Sign up to leave a comment.