|
Сборка мусора
|
|||
---|---|---|---|
#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 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Не, ну написано же в умных книгах, что попытка вызвать GC в коде будет носить статус "suggest". Переводится как "предложение". А дальше в этих книгах написано, что когда ссылки на объект нет, тогда объект может быть удален GC. Выглядит так, как будто на фундаменте этого простого принципа вы нагородили высокий небоскреб хитроумных противоречий. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 15:59 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мне кажется надо как в сайте Ораклистов начать с цитаты официальной документации. Инфа по восьмерке https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#gc-- public static void gc() Runs the garbage collector. Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects. The call System.gc() is effectively equivalent to the call: Runtime.getRuntime().gc() See Also: Runtime.gc() Потом пойти в jvm specification и потом в исходники. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 16:04 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизень....носить статус "suggest". Переводится как "предложение".... Во...блин У Java уже искуственный интелект появился. Ему предлогаешь и он сам принимает решение. КРУТО! А я похоже отстал от жизни ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 16:04 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
maytonПотом пойти в jvm specification и потом в исходники. OpenJDK_на_просторах_Inet Код: c 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 16:18 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Ну.. если автор будет happy. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 16:22 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevМозговой_слизень....носить статус "suggest". Переводится как "предложение".... Во...блин У Java уже искуственный интелект появился. Ему предлогаешь и он сам принимает решение. КРУТО! А я похоже отстал от жизни ну а в чем я не прав-то? У тебя есть возможность принудительно и однозначно вызвать GC? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:37 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизеньУ тебя есть возможность принудительно и однозначно вызвать GC? Да ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:51 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Хотя поторопился. Сначала, пожалуйсто, поясните, что Вы понимаете под словом "однозначно" Т.к., как я уже и сказал, "в зависимости от настроек". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:57 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
К сожалению "однозначного" в этом мире ничего нет Java может вообще никогда GC не вызвать, например если компьютер выключен. То никакой System.GC разумеется, ничем помочь не может ((( Без включенной вилки в розетку - GC очень тяжело работать. Но обычно, я выполнению рекомендации MicroSoft и когда что-то не работает, то проверяю, воткнута ли вилка в розетку. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 18:00 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevК сожалению "однозначного" в этом мире ничего нет Java может вообще никогда GC не вызвать, например если компьютер выключен. То никакой System.GC разумеется, ничем помочь не может ((( Без включенной вилки в розетку - GC очень тяжело работать. Но обычно, я выполнению рекомендации MicroSoft и когда что-то не работает, то проверяю, воткнута ли вилка в розетку. ну понятно, пошли отмазки. Вот еще цитатка, подтверждающая то, что Java может игнорировать попытки вызвать GC. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 18:23 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Я уже признал свою вину (((. Особенно игнорирует когда компьютер выключен. Просто когда писал ответ, об этой возможности не подумал ((( но об этом уже покаялся Как сложно жить! Все так не однозначно ((( Код: sql 1. 2. 3.
P.S. Модератор, забаньте меня пожалуйсто на пару суток. А то реально "кипение мозгов". Пойду их холодным стаутом Belhaven залью ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 18:54 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, а я с тёмного на светлое пшеничное перешёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 19:00 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevЯ уже признал свою вину (((. Особенно игнорирует когда компьютер выключен. Просто когда писал ответ, об этой возможности не подумал ((( но об этом уже покаялся Как сложно жить! Все так не однозначно ((( Код: sql 1. 2. 3.
P.S. Модератор, забаньте меня пожалуйсто на пару суток. А то реально "кипение мозгов". Пойду их холодным стаутом Belhaven залью ((( В данном случае вы не правы. Есть разница между спецификацией и конкретной имплементацией ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 19:03 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мозговой_слизень...Вот еще цитатка...может игнорировать.... Плохая цитата. Плохая книга. Тут еще полно возможностей: 1. Компьютер игнорирует включение, т.к. не воткнут в розетку 2. Windows игнорирует ПРОСЬБУ войти в систему, т.к. не правильный пароль 3. Windows игнориурет ПРОСЬБУ запустить программу, т.к. на компьютере не установлена Java Runtime 4. Windows игнорирует ПРОСЬБУ поставить Java, т.к. нет места на жестком диске .... 10. Кофеварка игнорирует ПРОСЬБУ налить кофе, т.к. закончился кофейный порошек. .... 23. Пивная пробка игнорирует ПРОСЬБУ открутиться, т.к. в конструкции бутылки пива Brewdog PUNK IPA предполагалось использовать открывашку, а ее нет в наличии на работе ((( а открывать пивные бутылки подручными средствами я не умею ((( ... 100500. Java игнорирetт ПРОСЬБУ вызвать GC, т.к. у него просто нет настроения Как сложно жить !!!! Все... ушел за пивом... o.s. Спасибо клавиатуре за любезно предоставленные буквы. Какая хорошая клавиатура, какая плохая Java ((( p.p.s. - Доктор меня все игнорируют - Кто "все"? - Java - Следующий... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 19:07 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevЯ уже признал свою вину (((. Особенно игнорирует когда компьютер выключен. Просто когда писал ответ, об этой возможности не подумал ((( но об этом уже покаялся Как сложно жить! Все так не однозначно ((( Код: sql 1. 2. 3.
Совершенно зря юродствуете. Код, что вы привели всего-лишь передает информацию сборщику мусора, что кто-то вызвал System.gc(), а тому в свою очередь ничего не мешает это проигнорировать или, к примеру, не выполнять Full GC. g1CollectedHeap.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
cmsHeap.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
т.е. крутилок там несколько, а не одна в виде -XX:+DisableExplicitGC ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 19:36 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevПлохая цитата. Плохая книга. странно, несколько тысяч человек с вами не согласятся) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 19:44 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevА этого мало? ))) Ключ и - я думал, ещё есть :) Leonid KudryavtsevПросто мне кажется, что по ходу дискуссии идея "что в зависимости от настроек и используемого GC, System.GC() МОЖЕТ игнорироваться" трансформировалась в "код System.GC() выглядит примерно так": Код: sql 1. 2. 3. 4. 5.
Никакого рандома. Скорее так: есть накоторое число, харрактеризущее "нужность полной сборки". Например от 0 до 100. При 90 fullGC запуститься автоматически. При 30 и прямой вызов не поможет. Все числа от балды. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:43 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121312]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
84ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 204ms |
0 / 0 |