LINUX.ORG.RU
ФорумTalks

Жаба ест память

 , ,


0

3

Есть сервер. На нём крутятся PostgreSQL, Mongo, самописные числодробильные микросервисы, Keycloak и ActiveMQ, через который они все координируются. Когда пользователей много, запускается много экземпляров микросервисов. Память подходит к концу.

Вопрос: угадайте, кого прибьют первым по OOM?

Ответ: ActiveMQ (1G), затем Keycloak (500M). Все остальные потребляют меньше памяти.

★★★

Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от grim

Обсуждение началось с Есть сервер. На нём крутятся …. Ну, можете на него же в придачу к кафке и админку для неё прикрутить. Легче не будет.

Так-то можно и кафку, и монгу, и постгрес со всеми микросервисами спрятать за Web UI, только это будет совсем другая история (и стадо админов там тоже будет присутствовать).

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Если вам не нравится ActiveMQ, возможно вам следует перейти на Kafka. После этого мнение про ActiveMQ может значительно улучшиться.

Навзвание звучит зловеще :)

olegd ★★★
() автор топика
Ответ на: комментарий от olegd

Ну выдай 2 гига да посмотри, вдруг вы там какую-то фигню с персистентными очередями накрутили или отравленные сообщения плодите.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

отравленные сообщения

В смысле «от_п_равленные»? Потому что у нас был какой-то глюк, что создавались сообщения, которые нельзя было ни прочитать, ни удалить :)

В ActiveMQ.DLQ около 18 000 сообщений в Pending. Это может потреблять 900М памяти?

olegd ★★★
() автор топика
Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от olegd

В смысле poisoned. Это те которые нельзя нормально обработать, но при этом они либо не удаляются и забивают память, либо порождают ещё больше сообщений и забивают память ещё быстрее.

В ActiveMQ.DLQ около 18 000 сообщений в Pending.

Если они у вас по 50Кб, то почему нет?

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

Когда у вас 18000 сообщений висит, это значит либо тот кто их должен читать не читает, либо читает медленно, либо забывает их акать.

ya-betmen ★★★★★
()

А Вы не пробовали просто руками нарезать память через опции JVM?

DarkAmateur ★★★★
()
Ответ на: комментарий от ya-betmen

В смысле poisoned. Это те которые нельзя нормально обработать, но при этом они либо не удаляются и забивают память, либо порождают ещё больше сообщений и забивают память ещё быстрее.

Ой, сразу Kafka пахнуло.

Когда у вас 18000 сообщений висит, это значит либо тот кто их должен читать не читает, либо читает медленно, либо забывает их акать.

Утраиваю. Замещать БД через ActiveMQ --- такое себе.

DarkAmateur ★★★★
()
Последнее исправление: DarkAmateur (всего исправлений: 1)
Ответ на: комментарий от Shadow

и в native GraalVM, вдруг запустится

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

DarkAmateur ★★★★
()
Ответ на: комментарий от DarkAmateur

А, ну и ладно. Тогда Open J9 без вариантов.

Shadow ★★★★★
()

ActiveMQ (1G), затем Keycloak (500M). Все остальные потребляют меньше памяти.

А всех остальных сколько по совокупности потреблятельства? А то может у вас там запылившийся хлам с 2Гб мозгов.

anc ★★★★★
()
Ответ на: комментарий от DarkAmateur

Не представляю себе ситуацию когда из кафки нельзя прочитать сообщение. Вернее не так, не представляю что должно помешать сдвинуть маркер, даже если оно кривое.

ya-betmen ★★★★★
()
Ответ на: комментарий от olegd

Понизьте сеньоров и верните пенсионеров, тоже мне проблема...

anc ★★★★★
()
Ответ на: комментарий от Tark

Плашка оперативы 16 гиг стоит 4 тысячи рублей.

Зависит от плашки. Регистровая «чутка» подороже. А серверные регистровые обойдутся ещё более «„чутка“ подороже».

anc ★★★★★
()

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

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

lovesan ★★
()
Ответ на: комментарий от anc

У чувака в 2024 году гига два памяти, там основную долю занимает activemq, о каком ecc и прочих серьезных видах памяти вообще может идти речь? Сервер очередей гонять можно хоть почтовыми голубями, тут не особо критична производительность.

Tark ★★
()
Ответ на: комментарий от Tark

У чувака в 2024 году гига два памяти, там основную долю занимает activemq, о каком ecc и прочих серьезных видах памяти вообще может идти речь?

Старый сервак например. Не?

anc ★★★★★
()
Ответ на: комментарий от olegd

При чем здесь впечатления?

Ограничивать количество интанс нужно до того как начали их плодить.

Даже если у вас кубернетес на кластере из тысяч машин.

А жаба жрет память или что еще - не важно.

У кадров nginx в oom валимя выжрав почти гиг памяти.

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

Т.е. предохраняться нужно всегда.

grim ★★☆☆
()
Ответ на: комментарий от ugoday

Ну, можете на него же в придачу к кафке

Очевидно вы о Кафка только слышили, если такое предлагаете даже в шутку.

grim ★★☆☆
()

Нужно больше памяти или swap. И лучше нормального swap в разделе или файле, а не zram/zswap, а то в top/htop будешь видеть одно, а по факту памяти выделить нельзя.

anonymous_sama ★★★★★
()

Жаба ест память

Из других новостей: вода мокрая.

kirezz
()

Жаба - она такая. И ест и душит.

rupert ★★★★★
()
Ответ на: комментарий от kaldeon

Туалет тоже в некотором роде «многопользовательская система».

anc ★★★★★
()

норм железо поставить.

не использовать старый amq - он г**нище(переход на артемис уже во всех ультралегаси ынтырпрайз монолитах выполнен)

не использовать amq как хранилище это не кафка

не использовать жяву если не умеете в жяву

guyvernk
()
Ответ на: комментарий от guyvernk

не использовать жяву если не умеете в жяву

а если умеете, то тем более «не использовать жяву».

anc ★★★★★
()
Ответ на: комментарий от anc

зависит от задачи.

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

guyvernk
()

Ответ: ActiveMQ (1G), затем Keycloak (500M). Все остальные потребляют меньше памяти.

3.14здец открытие.

her_s_gory
()
Ответ на: комментарий от anc

советую ознакомиться о современном состоянии жявы

а то тут все жявахейтеры застряли в эпоху 5 жявки и все их потуги схохмить о том какая жявка г**вно выглядят как клоунские ужимки престарелых обезьян с айкью <60

guyvernk
()
Ответ на: комментарий от guyvernk

советую ознакомиться о современном состоянии жявы

Жрет больше чем

в эпоху

XX

anc ★★★★★
()
Ответ на: комментарий от lovesan

Проблема с жабой не то что она сама что-то там жрет, на самом деле не так уж и жрет. А в том какие на ней пишут люди

То ли дело языки на которых никто не пишет!

ya-betmen ★★★★★
()
Ответ на: комментарий от lovesan

но там у людей вообще клиника

Мне в голову приходят только циклы со счётчиком и питоновский Int64 повсюду. Ты же не про тех, кто использует питон как клей или использует cython, когда нужно?

Shadow ★★★★★
()
Ответ на: комментарий от guyvernk

а то тут все жявахейтеры застряли в эпоху 5 жявки и все их потуги схохмить о том какая жявка г**вно выглядят как клоунские ужимки престарелых обезьян с айкью <60

Вот вспомнил молодость и «ознакомился»

class HelloLOR {
 public static void main(String[] args) {
  int i = 1;
  while ( true ) {
   System.out.println("Hello LOR " + i);
   i++;
   try {
    Thread.sleep(1);
   } catch(Exception e) {
    System.out.println(e);
   }
  }
 }
}
Вроде всё тривиально, но куда моя память девается? В смысле почему оно жрет по восходящей?

PS
anc$ java --version
java 23.0.1 2024-10-15
Java(TM) SE Runtime Environment (build 23.0.1+11-39)
Java HotSpot(TM) 64-Bit Server VM (build 23.0.1+11-39, mixed mode, sharing)

anc ★★★★★
()
Ответ на: комментарий от ya-betmen

Вернее не так, не представляю что должно помешать сдвинуть маркер, даже если оно кривое.

Типичный кейс для Kafka + Spring Kafka: если происходит ошибка десериализации сообщения, то оно стреляет где-то внутри Spring и никто просто не вызывает твой обработчик, который и должен сдвигать маркер (точнее, отсылать отмашку об успешном приёме). Самая беда в том, что есть кучи решений как эту проблему решать, но почему-то они гуляют от версий к версии и степени костыльности решения.

DarkAmateur ★★★★
()
Ответ на: комментарий от anc

Код не запускал и не профилировал, но порассуждаю.

У тебя на каждый проход цикла строится новый строковый объект. По логике вещей: да, с течение времени будет выглядеть так, что оно жрёт память, но ровно до тех пор, пока не придёт GC и не уберёт. VisualVM тебе должен показать пилу по метрике памяти.

Если памяти очень много, то да, GC придёт не скоро и будет казаться, что Java течёт. Попробуй руками выставить лимиты памяти через опции JVM.

DarkAmateur ★★★★
()
Последнее исправление: DarkAmateur (всего исправлений: 1)
Ответ на: комментарий от DarkAmateur

оно стреляет где-то внутри Spring

Вообще подписка даже на жмс спринговыми примитивами это обсоство, оно ж там внутри всё кривое.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

спринговыми примитивами это обсоство

Скорее так: кто умеет, тот умеет; кто не умеет, решает задачу по-другому. А так да, я порвался, пока шараду эту раскуривал.

DarkAmateur ★★★★
()
Ответ на: комментарий от DarkAmateur

опции JVM

Это, простите мою неграмотность, какие? В смысле какие ключики мне указать нужно у javac и/или у java? Поймите правильно, я не стебусь, просто не знаток этой темы.

anc ★★★★★
()
Ответ на: комментарий от ya-betmen

А как должно, по низходящей?

Оно должно быть прямой линией, а не «вос» или «вниз» «ходящей».

anc ★★★★★
()
Ответ на: комментарий от DarkAmateur

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

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

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

anc ★★★★★
()
Ответ на: комментарий от lovesan

Отсюда высираются трехэтажные иерархии говна на говне … понос на питоне

У кого что на уме.

slew
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)