Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сборка мусора  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1125
Всем привет!
Подскажите пожалуйста почему сборка мусора может происходить чаще чем я ожидаю?
Например я задал максимальный размер памяти для приложения 28 ГБ -Xmx28g
В моём понимании (оно может отличаться от правильного :) ) сборка должна происходить когда размер используемой памяти будет приближаться к 28 ГБ, а через Jconsole я вижу что сборка идёт чаще см. скриншот. Почему сборщик мусора так частит окоянный ? :)

К сообщению приложен файл. Размер - 131Kb
6 май 19, 13:01    [21878742]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
Медитировать над различием между Minor и Major GC.
У Вас full garbage collector запускался только 1 (один) раз.
6 май 19, 13:50    [21878840]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
нет, извеняюсь, 14 раз запускался

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

Как вариант: сборка мусора запускается из кода приложения
6 май 19, 13:52    [21878849]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1125
Leonid Kudryavtsev
нет, извиняюсь, 14 раз запускался

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

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


Чтобы получить лог GC нужно JVM запускать с какими-то параметрами?
Про сборку из приложения (приложение это Tomcat) хорошая идея, спасибо за подсказку. Я проверю.
6 май 19, 13:55    [21878857]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1028
Указание максимального размера не означает же, что будет взята вся память сразу по максимуму.

Если указать минимальный размер равный максимальному (что как раз и советуют для серверных приложений), картина такая же?
6 май 19, 14:06    [21878886]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
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.
6 май 19, 14:06    [21878889]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
ivanra
Member

Откуда:
Сообщений: 852
Из графика видно:
Под кучу занято пока не 28, а только 20 гб;
По дефолту -XX:MinHeapFreeRatio=40, то есть следующее увеличение кучи произойдет, когда после сборки будет занято более 12гб (60%), на картинке видно, что пока после сборки остается занятым 9гб;

аномалии:
По идее, minor сборка должна происходить на 9+20*1/3 ~ 15 гб, а тут почему-то раньше. Искать в коде вызов GC;
Подозрительно много занято под oldgen. Если это рядовые web-приложения на Tomcat-е, неплохо бы поискать утечки
6 май 19, 14:31    [21878965]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1125
Leonid Kudryavtsev,

Понятно, спасибо за подсказки.
6 май 19, 14:31    [21878967]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
lleming
Member

Откуда:
Сообщений: 1607
а какой gc ?
6 май 19, 14:55    [21879027]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
Mandarin, есть желание покататься на 12-той модели жигулей?
6 май 19, 15:18    [21879051]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
Mandarin,

Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят.
12 май 19, 00:22    [21882609]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
Жаль. Надо было погонять этот Шенандох.
12 май 19, 00:49    [21882627]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1733
Мозговой_слизень
Mandarin,

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


Ошибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев.
Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям.
13 май 19, 06:08    [21882953]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
Alexey Tomin
Мозговой_слизень
Mandarin,

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


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


источник знания?
14 май 19, 03:42    [21883925]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
впрочем, пилите, Шура, пилите.
14 май 19, 03:46    [21883926]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Alexey Tomin
Member

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

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


Знаний чего?

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

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

Плюс разные сборщики мусора работают по-разному.
14 май 19, 07:24    [21883958]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
Alexey Tomin
Мозговой_слизень
пропущено...

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


Знаний чего?

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

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

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


Ну и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный.
14 май 19, 07:57    [21883976]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
наверное тогда, когда наступят УСЛОВИЯ для его запуска. Другое дело, что эти условия для разных GC могут быть разными

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

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

я так понимаю, нужно читать так:

"Сидел с бабками на завалинке, одна бабка сказала ....[далее по тексту]"
14 май 19, 10:34    [21884116]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
Alexey Tomin
или НЕ запуститься при вызова gc(). Никаких гарантий.

Что значит "никакой гарантии" ? Есть ключи командной строки которые управляют данным поведением.
14 май 19, 10:38    [21884121]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
Почему никто до сих пор не попросил у мандарина его командную строку?

Почему никому не интересно увидеть вкладку плагина Visual GC ?
14 май 19, 10:41    [21884124]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1733
Leonid Kudryavtsev
Alexey Tomin
или НЕ запуститься при вызова gc(). Никаких гарантий.

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


Ключи? Знаю только XX:+DisableExplicitGC который делаеть System.gc() пустышкой. А что ещё?
14 май 19, 11:22    [21884192]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
А этого мало? )))

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

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

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

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

Почему никому не интересно увидеть вкладку плагина Visual GC ?

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

А в логах и так причина вызова GC должна английским по экрану быть написана.
14 май 19, 13:57    [21884403]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
А ну тогда топик можно закрыть за остуствием фактов. Кстати всегда удивляла способность программистов к телепатии.
14 май 19, 14:16    [21884437]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
Leonid Kudryavtsev
А этого мало? )))

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

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

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

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

Почему никому не интересно увидеть вкладку плагина Visual GC ?

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

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


Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж.
14 май 19, 15:40    [21884559]     Ответить | Цитировать Сообщить модератору
 Re: Сборка мусора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7776
Мозговой_слизень
.....
Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж.

+++

Мозговой_слизень
Ну и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный.
14 май 19, 15:42    [21884562]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить