Garbage Collection
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Garbage Collection
Здрасьте, где там Java? И Hadoop не в enterprise продукте. вы на их сайт зайдите, там плюсовые программисты нужны.
Update:
proof здесь, из первых рук так сказать: http://www.splunk.com/view/SP-CAAABF9" onclick="window.open(this.href);return false;
С++ и Python (но только для "обвязки" и внешних модулей).
Я понимаю что хотелось поумничать, но делать это не имея тесного знакомства с продуктом как-то несколько опрометчиво.
Update:
proof здесь, из первых рук так сказать: http://www.splunk.com/view/SP-CAAABF9" onclick="window.open(this.href);return false;
С++ и Python (но только для "обвязки" и внешних модулей).
Я понимаю что хотелось поумничать, но делать это не имея тесного знакомства с продуктом как-то несколько опрометчиво.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
А как вы определяете что надо больше?Flash-04 wrote:Иногда и больше надо.
В общих чертах...
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Garbage Collection
Technical support говорит
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
А они поди смотрят на то сколько памяти java занимает - хватаются за голову и добавляют памяти.Flash-04 wrote:Technical support говорит
А java с радостью откладывает сборку мусора наподольше, поскольку до максимума ещё далеко, и зажирает ещё больше памяти.
А support иногда пытается "спасти" ситуацию и bounce the app, что хоронит всю оптимизацию со сбором статистики, кэшами и проч.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Garbage Collection
Не-а, тупо смотрят что с 32 Gb приложение дохнет, а с 64Gb бодро работает.
С этим конкретным приложением беда в том что оно дохренища данных вынуждено держать в оперативки. Больше поток данных - больше памяти надо. Ну и тогось... Правда там насколько я понял начали сказываться дефекты самой архитектуры.
С этим конкретным приложением беда в том что оно дохренища данных вынуждено держать в оперативки. Больше поток данных - больше памяти надо. Ну и тогось... Правда там насколько я понял начали сказываться дефекты самой архитектуры.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
А можно попросить разъяснить?kostik78 wrote:Ответ на этот вопрос не совсем прост. Но в целом не зависит. Но в G1 есть ньюанс, он чем то похож на CMS если Вы расcматриваете отдельный регион (eden gen + metadata + old gen), но в отличие от CMS у которого был только один такой регион G1 делит хип на множество таких кубиков. Там на самом деле есть threshold -XX:InitiatingHeapOccupancyPercent=45. Он говорит G1 на начальном этапе как вести себя пока статистика не набрана еще.Palych wrote:То есть - высота зубьев пилы не зависит от размера Xmx?
Как подсчитывается вся куча? Это Xmx или его производная?XX:InitiatingHeapOccupancyPercent: Percentage of the (entire) heap occupancy to start a concurrent GC cycle. GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap and not just one of the generations, including G1, use this option. A value of 0 denotes 'do constant GC cycles'. The default value is 45.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Азы:
https://static.rainfocus.com/oracle/oow ... ep2016.pdf" onclick="window.open(this.href);return false;
Отличная презентация про G1GC. тут новые фичи самые интересные
https://static.rainfocus.com/oracle/oow ... p-dive.pdf" onclick="window.open(this.href);return false;
А это мужик, который тулзы написал на которые я тут выше ссылалась. Хорошие кстати
https://static.rainfocus.com/oracle/oow ... CLogs.pptx" onclick="window.open(this.href);return false;
https://static.rainfocus.com/oracle/oow ... rbage.pptx" onclick="window.open(this.href);return false;
https://static.rainfocus.com/oracle/oow ... ep2016.pdf" onclick="window.open(this.href);return false;
Отличная презентация про G1GC. тут новые фичи самые интересные
https://static.rainfocus.com/oracle/oow ... p-dive.pdf" onclick="window.open(this.href);return false;
А это мужик, который тулзы написал на которые я тут выше ссылалась. Хорошие кстати
https://static.rainfocus.com/oracle/oow ... CLogs.pptx" onclick="window.open(this.href);return false;
https://static.rainfocus.com/oracle/oow ... rbage.pptx" onclick="window.open(this.href);return false;
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Да вы правы дo max вроде не доходит, но я видела когда доходил. Думаю там несколькo факторов и все не так straight forward, впрочем я уже об этом писала, мало ли какие другие флаги выставлeны при запуске JVM. Вот картинка с системы (G1GC) где каждый час запускается процесс сборки данных дляшийся минут 10-15kostik78 wrote:G1 не работает по лимиту памяти как CMS или другие Java GC. Он как раз статистичесикий. Чем дольше Java работает тем стабильнее паузы, конечно если паттерн аллокации памяти не скачет туда сюда рандомно.
По дефолту G1 впринципе работает намного лучше чем CMS который требует тонкого тюнининга. Но G1 тоже требует настройки и у него есть ахилесовы пяты: Final, Weak, Soft and etc references, требует warm period чтобы статистику набрать и баги еще прут только так. Но в целом наш опыт что G1 работает гораздо предсказуемее и стабильнее чем CMS, которому переодически требуется переделывать fine tuning введу изменившегося кода.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Не совсем понял вопроса. Xmx это максимальный хип. На стороне сервера лучше задавать Xms и Xmx одинаковыми тогда параметр будет от Xmx. И опять же пока не набереться статистика.Palych wrote: Как подсчитывается вся куча? Это Xmx или его производная?
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Глядя на картинку похоже что у Вас batch load - то пусто то густо. G1 не лучший выбор в данном случае. Я бы с Parallel GC поигрался. Для таких лоадов его можно довольно хорошо затюнить.Сабина wrote: Да вы правы дo max вроде не доходит, но я видела когда доходил. Думаю там несколькo факторов и все не так straight forward, впрочем я уже об этом писала, мало ли какие другие флаги выставлeны при запуске JVM. Вот картинка с системы (G1GC) где каждый час запускается процесс сборки данных дляшийся минут 10-15
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
и батч и не батч. У нас таких (это EC2 instance) 40, они собирают данные раз в день и раз в час. по требованиям могут начать собирать чаще или реже. обьем данных в батче ( длительность обработки) тоже очень непредсказуемая. Ну и все они кладут собранное в Kafka claster.kostik78 wrote:Глядя на картинку похоже что у Вас batch load - то пусто то густо. G1 не лучший выбор в данном случае. Я бы с Parallel GC поигрался. Для таких лоадов его можно довольно хорошо затюнить.Сабина wrote: Да вы правы дo max вроде не доходит, но я видела когда доходил. Думаю там несколькo факторов и все не так straight forward, впрочем я уже об этом писала, мало ли какие другие флаги выставлeны при запуске JVM. Вот картинка с системы (G1GC) где каждый час запускается процесс сборки данных дляшийся минут 10-15
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Допустим Xmx=1G, Xms=64m.kostik78 wrote:Не совсем понял вопроса. Xmx это максимальный хип. На стороне сервера лучше задавать Xms и Xmx одинаковыми тогда параметр будет от Xmx. И опять же пока не набереться статистика.Palych wrote: Как подсчитывается вся куча? Это Xmx или его производная?
В данный момент куча 100m.
InitiatingHeapOccupancyPercent=45
Вопрос: при каком размере кучи включится сборщик?
- 45m?
- 0.45G?
- 64m * 0.45?
И еще, если не возражаете (извиняюсь за назойливость):
Что делает G1 если осознает что не выполняет взятые на себя обязательства?
Есть ли у него какие инструменты кроме подстройки размера кучи, при котором он включается?
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Ну я говорю что Вам G1 не нужен для такого лоада. Я бы Parallel GC затюнил и еще демографию памяти посмотрел во время работы на предмет того что-то временное в old gen переползает а не должно. Ну мне тут сложно советовать ибо для файн тюнинга надо знать как приложение работает.Сабина wrote:
и батч и не батч. У нас таких (это EC2 instance) 40, они собирают данные раз в день и раз в час. по требованиям могут начать собирать чаще или реже. обьем данных в батче ( длительность обработки) тоже очень непредсказуемая. Ну и все они кладут собранное в Kafka claster.
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Нету однозначного ответа. Если потребление памяти активное и быстро вырастет то 45% от 1G. А иначе просто наберет статистику и будет пахать как надо.Palych wrote: Допустим Xmx=1G, Xms=64m.
В данный момент куча 100m.
InitiatingHeapOccupancyPercent=45
Вопрос: при каком размере кучи включится сборщик?
- 45m?
- 0.45G?
- 64m * 0.45?
Обязательства по чему ? По времени - это best efforts. То бишь стремиться сделать но не гарантирует. Если память закончиться то сделает world pause with full GC + defragmentation + rearrangement of G1 regions.Palych wrote: И еще, если не возражаете (извиняюсь за назойливость):
Что делает G1 если осознает что не выполняет взятые на себя обязательства?
Есть ли у него какие инструменты кроме подстройки размера кучи, при котором он включается?
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Так я и обьяснила как работает. Временной интервал батча - непостоянен, обьем данных тоже, ровно как и частота повторенияkostik78 wrote:Ну я говорю что Вам G1 не нужен для такого лоада. Я бы Parallel GC затюнил и еще демографию памяти посмотрел во время работы на предмет того что-то временное в old gen переползает а не должно. Ну мне тут сложно советовать ибо для файн тюнинга надо знать как приложение работает.Сабина wrote:
и батч и не батч. У нас таких (это EC2 instance) 40, они собирают данные раз в день и раз в час. по требованиям могут начать собирать чаще или реже. обьем данных в батче ( длительность обработки) тоже очень непредсказуемая. Ну и все они кладут собранное в Kafka claster.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Вы меня не поняли. Для файн-тюнинга надо смотреть на статистику GC (нужно некоторое колличество verbose output включить), memory hot spots and etc Вообщем детально и методично к вопросу подходитьСабина wrote: Так я и обьяснила как работает. Временной интервал батча - непостоянен, обьем данных тоже, ровно как и частота повторения
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Я понимаю что не гарантирует. Вопрос в том - как он стремится?kostik78 wrote:Если потребление памяти активное и быстро вырастет то 45% от 1G. А иначе просто наберет статистику и будет пахать как надо.
Обязательства по чему ? По времени - это best efforts. То бишь стремиться сделать но не гарантирует. Если память закончиться то сделает world pause with full GC + defragmentation + rearrangement of G1 regions.Palych wrote: И еще, если не возражаете (извиняюсь за назойливость):
Что делает G1 если осознает что не выполняет взятые на себя обязательства?
Есть ли у него какие инструменты кроме подстройки размера кучи, при котором он включается?
Что делается если паузы оказываются слишком длинными. Допустим что память не кончилась.
Какие меры принимаются? В смысле - какой арсенал этих мер?
Входит ли в эти меры изменение границы за которой включается сборщик?
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
И правда не поняла Что значит не должно в old gen ? Ведь все эти регионы придуманы для рациональной работы сборщика, а не приложения ? Приложению сколько надо держать в памяти коллекцию столько оно и будет. Всегда есть варианты поменять, но рефакторинг начнется только если полезут ООМ или нужно уменьшить memory footprint ( на EC2 costs сэкономить, я не знаю). У нас стоял parallel GC, работал хуже. Но не факт что был настроен праивильно или вообще был настроен. Это дело такое, не зря все, включая Gil Tene говорят " не чешется - не трогайте"kostik78 wrote:Вы меня не поняли. Для файн-тюнинга надо смотреть на статистику GC (нужно некоторое колличество verbose output включить), memory hot spots and etc Вообщем детально и методично к вопросу подходитьСабина wrote: Так я и обьяснила как работает. Временной интервал батча - непостоянен, обьем данных тоже, ровно как и частота повторения
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Garbage Collection
Меня всегда интересовало, чето происходит системой посадки Фалкона во время world pause.
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Там много разного. Если детально интересуетсь почитайте блог Оракла по GC. там разные моменты они описывают. В конце концов исходники JVM тоже доступныPalych wrote: Что делается если паузы оказываются слишком длинными. Допустим что память не кончилась.
Какие меры принимаются? В смысле - какой арсенал этих мер?
Входит ли в эти меры изменение границы за которой включается сборщик?
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Garbage Collection
Ну смотрите для примера (эту ошибку девелопера я встречал несколько раз) - многопоточное приложение и есть какой то глобальный лок что может вызвать lock starvation. Потоки аллоцируют память что переживает несколько minor GC pauses из-за lock starvation и в результате эту память переносят в old gen хотя в реальности это временная аллокация. Если ситуация происходит часто, то в результате old gen забивается этим мусором и происходит old gen GC которого можно было избежать. Ну и т.д. Не очевидно ... но реально импакт на GC большой ... и зачастую нужно сделать простой фикс в коде чтобы избежать этой ситуации. Есть другие но идея примерна таже. Временная память (что по идее не должна покидать young gen) попадает в old gen.Сабина wrote:
И правда не поняла Что значит не должно в old gen ? Ведь все эти регионы придуманы для рациональной работы сборщика, а не приложения ? Приложению сколько надо держать в памяти коллекцию столько оно и будет. Всегда есть варианты поменять, но рефакторинг начнется только если полезут ООМ или нужно уменьшить memory footprint ( на EC2 costs сэкономить, я не знаю). У нас стоял parallel GC, работал хуже. Но не факт что был настроен праивильно или вообще был настроен. Это дело такое, не зря все, включая Gil Tene говорят " не чешется - не трогайте"
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Спасиюо, теперь понятно о чем речь и очень познавательноkostik78 wrote:Ну смотрите для примера (эту ошибку девелопера я встречал несколько раз) - многопоточное приложение и есть какой то глобальный лок что может вызвать lock starvation. Потоки аллоцируют память что переживает несколько minor GC pauses из-за lock starvation и в результате эту память переносят в old gen хотя в реальности это временная аллокация. Если ситуация происходит часто, то в результате old gen забивается этим мусором и происходит old gen GC которого можно было избежать. Ну и т.д. Не очевидно ... но реально импакт на GC большой ... и зачастую нужно сделать простой фикс в коде чтобы избежать этой ситуации. Есть другие но идея примерна таже. Временная память (что по идее не должна покидать young gen) попадает в old gen.Сабина wrote:
И правда не поняла Что значит не должно в old gen ? Ведь все эти регионы придуманы для рациональной работы сборщика, а не приложения ? Приложению сколько надо держать в памяти коллекцию столько оно и будет. Всегда есть варианты поменять, но рефакторинг начнется только если полезут ООМ или нужно уменьшить memory footprint ( на EC2 costs сэкономить, я не знаю). У нас стоял parallel GC, работал хуже. Но не факт что был настроен праивильно или вообще был настроен. Это дело такое, не зря все, включая Gil Tene говорят " не чешется - не трогайте"
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Кстати, я признаю фундаментальную ошибку моих еретических мыслей, посыпаю голову пеплом и уползаю в кусты.
Напомню/уточню что идея была чтобы собирать мусор не когда он вытеснит некий процент памяти, а когда для этого есть ресурсы, например по таймеру...
Таким образом можно бы было видеть сколько памяти приложению нужно, и (как я думал) избежать длинных пауз...
Главная проблема - сборка мусора занимает CPU на время, которое не коррелирует с количеством мусора. То есть - если мусора мало - это не значит что сборка мусора будет быстрой.
К тому же - получается что объекты вышедшие из употребления с точки зрения Java не обязательно являются мусором. (слабые ссылки, да и объекты могут быть возрождены). Стало быть - отвязаться от учета количества свободной памяти невозможно практически.
Напомню/уточню что идея была чтобы собирать мусор не когда он вытеснит некий процент памяти, а когда для этого есть ресурсы, например по таймеру...
Таким образом можно бы было видеть сколько памяти приложению нужно, и (как я думал) избежать длинных пауз...
Главная проблема - сборка мусора занимает CPU на время, которое не коррелирует с количеством мусора. То есть - если мусора мало - это не значит что сборка мусора будет быстрой.
К тому же - получается что объекты вышедшие из употребления с точки зрения Java не обязательно являются мусором. (слабые ссылки, да и объекты могут быть возрождены). Стало быть - отвязаться от учета количества свободной памяти невозможно практически.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Кстати вспомнила одну из new GC features.
Коллектор теперь сам распознает duplicate strings и убирает лишние копии. Правда мне это показалось немного dangerous в смысле что поддерживать референсы мне кажется может быть нетривиально
Коллектор теперь сам распознает duplicate strings и убирает лишние копии. Правда мне это показалось немного dangerous в смысле что поддерживать референсы мне кажется может быть нетривиально
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
soft references строго говоря не убитыеPalych wrote: (слабые ссылки, да и объекты могут быть возрождены).
а про "возрождены" можно поподробнее ?
https://www.youtube.com/watch?v=wOwblaKmyVw