|
Сборка мусора
|
|||
---|---|---|---|
#18+
Всем привет! Подскажите пожалуйста почему сборка мусора может происходить чаще чем я ожидаю? Например я задал максимальный размер памяти для приложения 28 ГБ -Xmx28g В моём понимании (оно может отличаться от правильного :) ) сборка должна происходить когда размер используемой памяти будет приближаться к 28 ГБ, а через Jconsole я вижу что сборка идёт чаще см. скриншот. Почему сборщик мусора так частит окоянный ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:01 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Медитировать над различием между Minor и Major GC. У Вас full garbage collector запускался только 1 (один) раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:50 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
нет, извеняюсь, 14 раз запускался В любом случае: нужная полная настройка JVM нужен паксимально детальный лог GC из него скорее всего и будет понятно, почему сборка мусора запускалась Как вариант: сборка мусора запускается из кода приложения ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:52 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevнет, извиняюсь, 14 раз запускался В любом случае: нужная полная настройка JVM нужен максимально детальный лог GC из него скорее всего и будет понятно, почему сборка мусора запускалась Как вариант: сборка мусора запускается из кода приложения Чтобы получить лог GC нужно JVM запускать с какими-то параметрами? Про сборку из приложения (приложение это Tomcat) хорошая идея, спасибо за подсказку. Я проверю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:55 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Указание максимального размера не означает же, что будет взята вся память сразу по максимуму. Если указать минимальный размер равный максимальному (что как раз и советуют для серверных приложений), картина такая же? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 14:06 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 14:06 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Из графика видно: Под кучу занято пока не 28, а только 20 гб; По дефолту -XX:MinHeapFreeRatio=40, то есть следующее увеличение кучи произойдет, когда после сборки будет занято более 12гб (60%), на картинке видно, что пока после сборки остается занятым 9гб; аномалии: По идее, minor сборка должна происходить на 9+20*1/3 ~ 15 гб, а тут почему-то раньше. Искать в коде вызов GC; Подозрительно много занято под oldgen. Если это рядовые web-приложения на Tomcat-е, неплохо бы поискать утечки ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 14:31 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Понятно, спасибо за подсказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 14:31 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Mandarin, есть желание покататься на 12-той модели жигулей? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 15:18 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Mandarin, Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 00:22 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Жаль. Надо было погонять этот Шенандох. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 00:49 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизеньMandarin, Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят. Ошибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев. Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 06:08 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Alexey TominМозговой_слизеньMandarin, Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят. Ошибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев. Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям. источник знания? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 03:42 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
впрочем, пилите, Шура, пилите. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 03:46 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизеньAlexey TominОшибаетесь. На JDK8 System.gc() запускает полную сборку в _большинстве_ случаев. Но в целом глупо ждать от сборщика мусора соответствия своим фантазиям. источник знания? Знаний чего? Что gc() работает? Несколько лет в мою зону ответственности входит поиск проблем с памятью приложения на JDK8. Так что и из кода вызов смотрел, и сам в jconsole и т.п. тыкал - собирается мусор. Особенно если тыкать с умом (например после окончания работы алгоритмов, которых памяти нахватали временно). Или того, что это не обязательство а везение? Ну так это документация- сборка мусора может запутиться сама, или НЕ запуститься при вызова gc(). Никаких гарантий. Плюс разные сборщики мусора работают по-разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 07:24 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Alexey TominМозговой_слизеньпропущено... источник знания? Знаний чего? Что gc() работает? Несколько лет в мою зону ответственности входит поиск проблем с памятью приложения на JDK8. Так что и из кода вызов смотрел, и сам в jconsole и т.п. тыкал - собирается мусор. Особенно если тыкать с умом (например после окончания работы алгоритмов, которых памяти нахватали временно). Или того, что это не обязательство а везение ? Ну так это документация- сборка мусора может запутиться сама, или НЕ запуститься при вызова gc(). Никаких гарантий . Плюс разные сборщики мусора работают по-разному. Ну и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 07:57 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
наверное тогда, когда наступят УСЛОВИЯ для его запуска. Другое дело, что эти условия для разных GC могут быть разными Про ручной запуск вызовом System.gc, в документации все нормально написано. Где-то я читал, что GC с версии джавы 8 запускается когда сам посчитает нужным, а не когда его попросят. я так понимаю, нужно читать так: "Сидел с бабками на завалинке, одна бабка сказала ....[далее по тексту]" ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 10:34 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Alexey Tominили НЕ запуститься при вызова gc(). Никаких гарантий. Что значит "никакой гарантии" ? Есть ключи командной строки которые управляют данным поведением. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 10:38 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Почему никто до сих пор не попросил у мандарина его командную строку? Почему никому не интересно увидеть вкладку плагина Visual GC ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 10:41 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevAlexey Tominили НЕ запуститься при вызова gc(). Никаких гарантий. Что значит "никакой гарантии" ? Есть ключи командной строки которые управляют данным поведением. Ключи? Знаю только XX:+DisableExplicitGC который делаеть System.gc() пустышкой. А что ещё? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 11:22 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
А этого мало? ))) Просто мне кажется, что по ходу дискуссии идея "что в зависимости от настроек и используемого GC, System.GC() МОЖЕТ игнорироваться" трансформировалась в "код System.GC() выглядит примерно так": Код: sql 1. 2. 3. 4. 5.
А, IMHO & AFAIK, это совсем не так. Нет там никакого random(). Разумеется осмысленного использования Systen.GC() в продакшен коде - исчезающе мало. Но в __редких__ случаях, он вполне себе используется. Почему никто до сих пор не попросил у мандарина его командную строку? Почему никому не интересно увидеть вкладку плагина Visual GC ? А зачем? Без логов GC все равно смысла мало, ссылку на включение логов автору я вроде кинул. Автор исчез. А в логах и так причина вызова GC должна английским по экрану быть написана. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 13:57 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
А ну тогда топик можно закрыть за остуствием фактов. Кстати всегда удивляла способность программистов к телепатии. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 14:16 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevА этого мало? ))) Просто мне кажется, что по ходу дискуссии идея "что в зависимости от настроек и используемого GC, System.GC() МОЖЕТ игнорироваться" трансформировалась в "код System.GC() выглядит примерно так": Код: sql 1. 2. 3. 4. 5.
А, IMHO & AFAIK, это совсем не так. Нет там никакого random(). Разумеется осмысленного использования Systen.GC() в продакшен коде - исчезающе мало. Но в __редких__ случаях, он вполне себе используется. Почему никто до сих пор не попросил у мандарина его командную строку? Почему никому не интересно увидеть вкладку плагина Visual GC ? А зачем? Без логов GC все равно смысла мало, ссылку на включение логов автору я вроде кинул. Автор исчез. А в логах и так причина вызова GC должна английским по экрану быть написана. Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 15:40 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизень..... Как приятно наблюдать кипение мозгов. Вот ведь когда не знаешь вопроса какой велосипед можно изобрести. Пятиколесный аж. +++ Мозговой_слизеньНу и как это противоречит моему утверждению, что GC запускается когда сам сочтет нужным? Я вот тут хотел цитатку привести из документации по GC, да передумал. Вижу вы и без меня умный. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 15:42 |
|
|
start [/forum/topic.php?fid=59&fpage=28&tid=2121312]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 230ms |
total: | 407ms |
0 / 0 |