|
|
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Вычитал, что cms gc не имеет цикла полной сборки мусора. Малая сборка не отличается от parallel. а вот вместо полной только major gc(чистка OldGen/tenured) Получается, что при малой сборке если на объект из young ссылается объект из old, то объект считается живым. Аналогично получается, что при major gc не сканируется young, соответственно если у объекта из tenured есть ссылка на young(или у объекта из young есть ссылка на tenured), то это рецепт бессмертия для этого сборщика мусора? Я всё правильно понял ? Как-то странно звучит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 13:54 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Нет, неправильно. Заканчивайте читать желтуху, есть же официальные туториалы от оракла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 13:59 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
забыл никНет, неправильно. Заканчивайте читать желтуху, есть же официальные туториалы от оракла Может быть поясните, что конкретно не так, если понимаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 14:11 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questioner, насколько я себе понимаю философию CMS (Conc-Mark-Sweep) этот сборщик расчитан на оконные приложения которые работают с пользователем и как следствие требуют наиболее быстрого времени отклика (малого времени stop-the-world) и как следствие жертвует полнотой очистки. Грубо говоря 97% мусора будут собраны за гарантийное короткое время а оставшиеся 3% убирать дорого (циклические связи и все такое) и CMS на них забивает болт. Иначе CMS не был-бы CMS-ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 17:34 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
maytonнасколько я себе понимаю философию CMS (Conc-Mark-Sweep) этот сборщик расчитан на оконные приложения которые работают с пользователем Да-да. Это, ведь, для любого сервера нормально уходить в отказ на десятки секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 19:11 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczmaytonнасколько я себе понимаю философию CMS (Conc-Mark-Sweep) этот сборщик расчитан на оконные приложения которые работают с пользователем Да-да. Это, ведь, для любого сервера нормально уходить в отказ на десятки секунд. Смотря какие задачи ставить. Если это бизнес-процессы загрузки-выгрузки и ETL то - нормально. Но почему вы говорите о нескольких секундах? Выглядит как передёргивание моих слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 19:17 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
maytonquestioner, насколько я себе понимаю философию CMS (Conc-Mark-Sweep) этот сборщик расчитан на оконные приложения которые работают с пользователем и как следствие требуют наиболее быстрого времени отклика (малого времени stop-the-world) и как следствие жертвует полнотой очистки. Грубо говоря 97% мусора будут собраны за гарантийное короткое время а оставшиеся 3% убирать дорого (циклические связи и все такое) и CMS на них забивает болт. Иначе CMS не был-бы CMS-ом. Насколько я понял философию, убирать не весь мусор может только G1. Время ему задали, сколько успел, столько собрал. Вроде про cms такого не пишут. Но мой вопрос немного другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 01:56 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questionerзабыл никНет, неправильно. Заканчивайте читать желтуху, есть же официальные туториалы от оракла Может быть поясните, что конкретно не так, если понимаете? Первая ссылка в гугле . Две стоп-паузы там на полной сборке. Вообще стандартное решение для исключения пауз (наприм для рекламного сервера)- выключить сборку old-gen нафиг и перезагружать ноды кластера раз в N часов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 08:25 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Alexey TominВообще стандартное решение для исключения пауз (наприм для рекламного сервера)- выключить сборку old-gen нафиг и перезагружать ноды кластера раз в N часов. Это трудно назвать стандартым. Обычно, правильная пропорция поколений вполне себе помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 11:01 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
maytonСмотря какие задачи ставить. Если это бизнес-процессы загрузки-выгрузки и ETL то - нормально. В среднем по больнице это не самый распространенный вид проектов. Задача сервера - обслужить множество клиентов. А единичные молотилки, это только ETL и краулеры. maytonНо почему вы говорите о нескольких секундах? Выглядит как передёргивание моих слов. Потому как на нормальном высоконагруженном сервере до появления CMS порядок stop-the-world пауз был именно такой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 11:04 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questionerПолучается, что при малой сборке если на объект из young ссылается объект из old, то объект считается живым. Да. Поэтому стоит внимательно относится к объектам со средним временем жизни(превышающим несколько минорных сборок), особенно если если эти объекты представлют собой всякие связные структуры, типо очереди или списки. Один элемент из такой коллекции переживший достаточное число сборок в минорном поколении(чтобы его переместили в старое), может утащить вслед за собой в старое поколение многих своих подельников по структуре данных, так называемая проблема GC Nepotism . questionerАналогично получается, что при major gc не сканируется young, соответственно если у объекта из tenured есть ссылка на young(или у объекта из young есть ссылка на tenured), то это рецепт бессмертия для этого сборщика мусора? Нет, молодое поколение также собирается при работе CMS, с учетом того что у CMS алгоритмы более CPU затратные, то по этому поводу даже опция есть ScavengeBeforeFullGC , позволяющая сначала запустить минорную сборку, чтобы CMS-у меньше работы осталось в новом поколении. А где Вы вообще прочитали этот бред? Дайте пожалуста ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 12:26 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominВообще стандартное решение для исключения пауз (наприм для рекламного сервера)- выключить сборку old-gen нафиг и перезагружать ноды кластера раз в N часов. Это трудно назвать стандартым. Обычно, правильная пропорция поколений вполне себе помогает. А есть реальные решения RT-софта? С перезапуском- про одно на joker разказывали, другое коллеги поддерживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 15:11 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
mayton а оставшиеся 3% убирать дорого (циклические связи и все такое) и CMS на них забивает болт. Насколько я понимаю, все Марк&Свипы как раз очень легко справляются с циклами - собственно для вымарывания их и задумывались. У них другая проблема - он не может освободить память полностью не отработав, поскольку до этого момента он знает только какая часть "занята". Если я правильно представляю алгоритм , то он строится на трех красках. При выделении памяти она становится черной. Далее грубое представление: 1. Вся занятая память маркируется белой. 2. Берем gc_root и помечаем фрагменты на которые они ссылаются серым. 3. Пробегаем по всем серым и меняем их на черные, а все белые фрагменты, на которые они ссылаются серыми. 4. Если были серые возвращаемся на п.3 5. Все белое - свободно. Из недостатков, алгоритм не копирующий, а значит есть все преимущества фрагментирования памяти. Ну и weak(soft)reference усложняет жизнь - надо следить чтоб не успело передать ссылку из нее в gc_root или черный квадрат. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:41 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
vimba А где Вы вообще прочитали этот бред? Дайте пожалуста ссылку. https://habrahabr.ru/post/269863/ При этом CMS GC использует ту же самую организацию памяти, что и уже рассмотренные Serial / Parallel GC: регионы Eden + Survivor 0 + Survivor 1 + Tenured и такие же принципы малой сборки мусора. Отличия начинаются только тогда, когда дело доходит до полной сборки. В случае CMS ее называют старшей (major) сборкой, а не полной, так как она не затрагивает объекты младшего поколения. В результате, малая и старшая сборки здесь всегда разделены. Одним из побочных эффектов такого разделения является то, что все объекты младшего поколения (даже потенциально мертвые) могут играть роль корней при определении статуса объектов в старшем поколении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:48 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestionerпропущено... Может быть поясните, что конкретно не так, если понимаете? Первая ссылка в гугле . Две стоп-паузы там на полной сборке. Вообще стандартное решение для исключения пауз (наприм для рекламного сервера)- выключить сборку old-gen нафиг и перезагружать ноды кластера раз в N часов. в приведенной ссылке тоже написано, что это чистка old generation и на ней 2 паузы STW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 19:16 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questionerв приведенной ссылке тоже написано, что это чистка old generation и на ней 2 паузы STW. Чтоб без пауз работать надо следить за всеми операциями с ссылками, а это поди дороже выйдет. Вот чего не понятно, почему здесь рисуют initial mark однопроходным Ведь и он легко раскладывается по потокам хоть по количеству потоков в основном приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 09:42 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевquestionerв приведенной ссылке тоже написано, что это чистка old generation и на ней 2 паузы STW. Чтоб без пауз работать надо следить за всеми операциями с ссылками, а это поди дороже выйдет. Вот чего не понятно, почему здесь рисуют initial mark однопроходным Ведь и он легко раскладывается по потокам хоть по количеству потоков в основном приложении. Вы уводите беседу в сторону) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 12:47 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questioner, это я похоже фигню сморозил. CMS действительно не чистит NewGen сам, меня переглючило как раз таки из-за того что у меня параметер CMSScavengeBeforeRemark всегда выставлен, поэтому сборщик нового поколения всегда запускается перед remark, и я по нивнимательности просматривая логи думал, что новое поколение чистит CMS. Соответсвенно если убрать парметр CMSScavengeBeforeRemark, и запустить такой несложный пример, то действительно наглядно видно как unreacheable объекты в Young удерживают от сборки unreacheable объекты в Tenured. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. Однако совсем крахом, дело не заканчивается, когда GC видит, что уже совсем кирдык и сейчас придётся упасть, он запускает сборку в Young, и соответсвенно там чистятся unreachable ссылки в старое поколение, затем запускается сборка старого поколения но уже в режиме "concurrent mode failure". Вернув ключик -XX:+CMSScavengeBeforeRemark получим приемлимое поведение, и старое поколение будет вычищаться в 0 как только оно заполнилось на 50% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:20 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
IMHO & AFAIK вся тема какой-то пересказ второразрядной доки. Вроде официальные доки вполне нормально различные модели GC описывают. Так же как плюсы и минусы различных сборшиков. p.s. CMS ни разу на реальных системах не использовал. Parallel collector на размерах кучи в единицы GB вполне прилично работает.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:57 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questionerВы уводите беседу в сторону) Так прямой ответ так и звучит. Для того и придуманы поколения, чтоб над каждым трудился свой сборщик мусора. Над младым уже давно трудится простой копирующий, а CMS,ParallelGC,G1 занимаются теми объектами, что постарше. Ибо нет серебряной пули. Вот ответ на первоначальный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:23 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевquestionerВы уводите беседу в сторону) Так прямой ответ так и звучит. Для того и придуманы поколения, чтоб над каждым трудился свой сборщик мусора. Над младым уже давно трудится простой копирующий, а CMS,ParallelGC,G1 занимаются теми объектами, что постарше. Ибо нет серебряной пули. Вот ответ на первоначальный вопрос. Ну вообще всегда используется только 1(один!) gc. а внутри него уже какие-то алгоритмы. Каждый коллектор трудится над уборкой всех поколений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:32 |
|
||
|
Как CMS работает без полной сборки мусора.
|
|||
|---|---|---|---|
|
#18+
questionerНу вообще всегда используется только 1(один!) gc. а внутри него уже какие-то алгоритмы. Каждый коллектор трудится над уборкой всех поколений Вообще-то нет. Для старого и нового поколения тип GC можно конфигурировать отдельно. Некоторые из них несовместимы и не могут быть использованы вместе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:35 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=77&tid=2123270]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 361ms |

| 0 / 0 |
