powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборка мусора
25 сообщений из 44, страница 1 из 2
Сборка мусора
    #39810150
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Подскажите пожалуйста почему сборка мусора может происходить чаще чем я ожидаю?
Например я задал максимальный размер памяти для приложения 28 ГБ -Xmx28g
В моём понимании (оно может отличаться от правильного :) ) сборка должна происходить когда размер используемой памяти будет приближаться к 28 ГБ, а через Jconsole я вижу что сборка идёт чаще см. скриншот. Почему сборщик мусора так частит окоянный ? :)
...
Рейтинг: 0 / 0
Сборка мусора
    #39810186
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Медитировать над различием между Minor и Major GC.
У Вас full garbage collector запускался только 1 (один) раз.
...
Рейтинг: 0 / 0
Сборка мусора
    #39810189
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, извеняюсь, 14 раз запускался

В любом случае:
нужная полная настройка JVM
нужен паксимально детальный лог GC из него скорее всего и будет понятно, почему сборка мусора запускалась

Как вариант: сборка мусора запускается из кода приложения
...
Рейтинг: 0 / 0
Сборка мусора
    #39810194
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevнет, извиняюсь, 14 раз запускался

В любом случае:
нужная полная настройка JVM
нужен максимально детальный лог GC из него скорее всего и будет понятно, почему сборка мусора запускалась

Как вариант: сборка мусора запускается из кода приложения

Чтобы получить лог GC нужно JVM запускать с какими-то параметрами?
Про сборку из приложения (приложение это Tomcat) хорошая идея, спасибо за подсказку. Я проверю.
...
Рейтинг: 0 / 0
Сборка мусора
    #39810205
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указание максимального размера не означает же, что будет взята вся память сразу по максимуму.

Если указать минимальный размер равный максимальному (что как раз и советуют для серверных приложений), картина такая же?
...
Рейтинг: 0 / 0
Сборка мусора
    #39810206
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin нужно JVM запускать с какими-то параметрами?
Да, разумеется

https://docs.oracle.com/javacomponents/jrockit-hotspot/migration-guide/logging.htm#JRHMG125

google:
https://confluence.atlassian.com/confkb/how-to-enable-garbage-collection-gc-logging-300813751.html
https://dzone.com/articles/enabling-and-analysing-the-garbage-collection-log
etc....

MandarinПро сборку из приложения (приложение это Tomcat) хорошая идея, спасибо за подсказку. Я проверю.
Плохая идея выделять сверх много памяти.

Т.к. при full GC все стоит "колом". Бизнес задачь, которые могут выдержать несколько секунд стояния __полным__ колом - я не знаю. При "обычных" GC выбор между "собирать мурок редко но колом стоять долго" vs "собирать мусор чаще, зато стоять колом будем меньше"

При таких объемах памяти нужно с какими-то более продвинутыми GC эксперементировать. IMHO

Не понятно, за какой период времени статистика. Т.к. на Вашем графике явно Minor, а не Full GC (пиков явно больше 14). Если minor GC запускается раз в 30 секунд - 1 мин. это крайне хороший показатель. Я бы успокоился и ничего не трогал.

MandarinПро сборку из приложения
-XX:+DisableExplicitGC.
...
Рейтинг: 0 / 0
Сборка мусора
    #39810225
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из графика видно:
Под кучу занято пока не 28, а только 20 гб;
По дефолту -XX:MinHeapFreeRatio=40, то есть следующее увеличение кучи произойдет, когда после сборки будет занято более 12гб (60%), на картинке видно, что пока после сборки остается занятым 9гб;

аномалии:
По идее, minor сборка должна происходить на 9+20*1/3 ~ 15 гб, а тут почему-то раньше. Искать в коде вызов GC;
Подозрительно много занято под oldgen. Если это рядовые web-приложения на Tomcat-е, неплохо бы поискать утечки
...
Рейтинг: 0 / 0
Сборка мусора
    #39810227
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Понятно, спасибо за подсказки.
...
Рейтинг: 0 / 0
Сборка мусора
    #39810249
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какой gc ?
...
Рейтинг: 0 / 0
Сборка мусора
    #39810258
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin, есть желание покататься на 12-той модели жигулей?
...
Рейтинг: 0 / 0
Сборка мусора
    #39812140
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin,

Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль. Надо было погонять этот Шенандох.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812318
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мозговой_слизеньMandarin,

Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят.

Ошибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев.
Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812718
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominМозговой_слизеньMandarin,

Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят.

Ошибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев.
Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям.

источник знания?
...
Рейтинг: 0 / 0
Сборка мусора
    #39812719
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
впрочем, пилите, Шура, пилите.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812737
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мозговой_слизеньAlexey TominОшибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев.
Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям.
источник знания?

Знаний чего?

Что gc() работает? Несколько лет в мою зону ответственности входит поиск проблем с памятью приложения на JDK8. Так что и из кода вызов смотрел, и сам в jconsole и т.п. тыкал - собирается мусор. Особенно если тыкать с умом (например после окончания работы алгоритмов, которых памяти нахватали временно).

Или того, что это не обязательство а везение? Ну так это документация- сборка мусора может запутиться сама, или НЕ запуститься при вызова gc(). Никаких гарантий.

Плюс разные сборщики мусора работают по-разному.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812747
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominМозговой_слизеньпропущено...

источник знания?

Знаний чего?

Что gc() работает? Несколько лет в мою зону ответственности входит поиск проблем с памятью приложения на JDK8. Так что и из кода вызов смотрел, и сам в jconsole и т.п. тыкал - собирается мусор. Особенно если тыкать с умом (например после окончания работы алгоритмов, которых памяти нахватали временно).

Или того, что это не обязательство а везение ? Ну так это документация- сборка мусора может запутиться сама, или НЕ запуститься при вызова gc(). Никаких гарантий .

Плюс разные сборщики мусора работают по-разному.

Ну и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812836
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное тогда, когда наступят УСЛОВИЯ для его запуска. Другое дело, что эти условия для разных GC могут быть разными

Про ручной запуск вызовом System.gc, в документации все нормально написано.

Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят.
я так понимаю, нужно читать так:

"Сидел с бабками на завалинке, одна бабка сказала ....[далее по тексту]"
...
Рейтинг: 0 / 0
Сборка мусора
    #39812838
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tominили НЕ запуститься при вызова gc(). Никаких гарантий.

Что значит "никакой гарантии" ? Есть ключи командной строки которые управляют данным поведением.
...
Рейтинг: 0 / 0
Сборка мусора
    #39812840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему никто до сих пор не попросил у мандарина его командную строку?

Почему никому не интересно увидеть вкладку плагина Visual GC ?
...
Рейтинг: 0 / 0
Сборка мусора
    #39812879
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAlexey Tominили НЕ запуститься при вызова gc(). Никаких гарантий.

Что значит "никакой гарантии" ? Есть ключи командной строки которые управляют данным поведением.

Ключи? Знаю только XX:+DisableExplicitGC который делаеть System.gc() пустышкой. А что ещё?
...
Рейтинг: 0 / 0
Сборка мусора
    #39813013
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А этого мало? )))

Просто мне кажется, что по ходу дискуссии идея "что в зависимости от настроек и используемого GC, System.GC() МОЖЕТ игнорироваться" трансформировалась в "код System.GC() выглядит примерно так":
Код: sql
1.
2.
3.
4.
5.
if random() {
  ВЫЗВАТЬ_ЭТОТ_ЧЕРТОВ_GC();
} else {
  пощли_все_лесом()
}


А, IMHO & AFAIK, это совсем не так. Нет там никакого random().

Разумеется осмысленного использования Systen.GC() в продакшен коде - исчезающе мало. Но в __редких__ случаях, он вполне себе используется.

Почему никто до сих пор не попросил у мандарина его командную строку?

Почему никому не интересно увидеть вкладку плагина Visual GC ?
А зачем?
Без логов GC все равно смысла мало, ссылку на включение логов автору я вроде кинул. Автор исчез.

А в логах и так причина вызова GC должна английским по экрану быть написана.
...
Рейтинг: 0 / 0
Сборка мусора
    #39813031
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ну тогда топик можно закрыть за остуствием фактов. Кстати всегда удивляла способность программистов к телепатии.
...
Рейтинг: 0 / 0
Сборка мусора
    #39813092
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА этого мало? )))

Просто мне кажется, что по ходу дискуссии идея "что в зависимости от настроек и используемого GC, System.GC() МОЖЕТ игнорироваться" трансформировалась в "код System.GC() выглядит примерно так":
Код: sql
1.
2.
3.
4.
5.
if random() {
  ВЫЗВАТЬ_ЭТОТ_ЧЕРТОВ_GC();
} else {
  пощли_все_лесом()
}


А, IMHO & AFAIK, это совсем не так. Нет там никакого random().

Разумеется осмысленного использования Systen.GC() в продакшен коде - исчезающе мало. Но в __редких__ случаях, он вполне себе используется.

Почему никто до сих пор не попросил у мандарина его командную строку?

Почему никому не интересно увидеть вкладку плагина Visual GC ?
А зачем?
Без логов GC все равно смысла мало, ссылку на включение логов автору я вроде кинул. Автор исчез.

А в логах и так причина вызова GC должна английским по экрану быть написана.

Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж.
...
Рейтинг: 0 / 0
Сборка мусора
    #39813095
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мозговой_слизень.....
Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж.
+++

Мозговой_слизеньНу и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Сборка мусора
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]