Garbage Collection

kostik78
Уже с Приветом
Posts: 3180
Joined: 17 May 2007 14:07

Re: Garbage Collection

Post by kostik78 »

Сабина wrote:
Palych wrote: (слабые ссылки, да и объекты могут быть возрождены).
soft references строго говоря не убитые
а про "возрождены" можно поподробнее ?
Про возрожденные тоже не слышал. Это о чем?

Кстати определение дубликатов строчек есть давно а не только появилось ;) Началось это со static final String а потом добавили copy on write.
Palych
Уже с Приветом
Posts: 13989
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

kostik78 wrote: Про возрожденные тоже не слышал. Это о чем?
Это про Object resurrection. Я про него много раз мельком читал, но не углублялся.
kostik78
Уже с Приветом
Posts: 3180
Joined: 17 May 2007 14:07

Re: Garbage Collection

Post by kostik78 »

Palych wrote:
kostik78 wrote: Про возрожденные тоже не слышал. Это о чем?
Это про Object resurrection. Я про него много раз мельком читал, но не углублялся.
Аааа, Вы про этот хак с finalize. Дык это такой антипаттерн про который лучше не расказывать ибо найдуться деятели что нахачат что потом не разберешься.
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

kostik78 wrote: Кстати определение дубликатов строчек есть давно а не только появилось ;) Началось это со static final String а потом добавили copy on write.
Определение или авточистка ?
Про первое я давно вижу согласна, но чтоб коллектор сам убирал дубликаты - сравнительно недавно . Вот - стартинг java 8 upd 20
https://blog.codecentric.de/en/2014/08/ ... date-20-2/" onclick="window.open(this.href);return false;
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Garbage Collection

Post by Dmitry67 »

А все потому что в java нет data types
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

У меня тут задача вытащить хоть что-то из heapdump-а размером 17 GB. Все что удалось ( без OOM) - открыьт в JVisualVM и посмотреть на список классов. В табе Instances ничего from the top of the list ( самого интересного) не открывается :sadcry: .

Это случай когда один из Kafka consumers начинаесть жрать много памяти и тормозить, потом в какой то момент много коммитов в Кафку с этой ситемы начинает падать и "все умерли". Пытаюсь понять почему из 40 боксов именно у этого проблемы, по идее все идет по принципу rounds Robin, надеялась посмотреть на object tree - ан нет, MAT, YourKit сразу упали с OOM, тока VisualVm что-то вымучил долго думв до того как
https://www.youtube.com/watch?v=wOwblaKmyVw
kostik78
Уже с Приветом
Posts: 3180
Joined: 17 May 2007 14:07

Re: Garbage Collection

Post by kostik78 »

Сабина wrote:У меня тут задача вытащить хоть что-то из heapdump-а размером 17 GB. Все что удалось ( без OOM) - открыьт в JVisualVM и посмотреть на список классов. В табе Instances ничего from the top of the list ( самого интересного) не открывается :sadcry: .

Это случай когда один из Kafka consumers начинаесть жрать много памяти и тормозить, потом в какой то момент много коммитов в Кафку с этой ситемы начинает падать и "все умерли". Пытаюсь понять почему из 40 боксов именно у этого проблемы, по идее все идет по принципу rounds Robin, надеялась посмотреть на object tree - ан нет, MAT, YourKit сразу упали с OOM, тока VisualVm что-то вымучил долго думв до того как
Чего то zk классов много. А по сабжекту - большие хипы на большом железе подымать а у mat надо jvm параметры поправить. Я обычно сервак берут с 64gb memory и на нем терзаю через ssh X-Forwarding.
Palych
Уже с Приветом
Posts: 13989
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

Сабина wrote: Это случай когда один из Kafka consumers начинаесть жрать много памяти и тормозить, потом в какой то момент много коммитов в Кафку с этой ситемы начинает падать и "все умерли". Пытаюсь понять почему из 40 боксов именно у этого проблемы,
Я бы предположил что она сначала начинает тормозить по какой-то причине, а из-за этого жрет память.
И расследовать бы попробовал timing отдельных операций, не обращая внимания на JVM...
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

kostik78 wrote:
Сабина wrote:У меня тут задача вытащить хоть что-то из heapdump-а размером 17 GB. Все что удалось ( без OOM) - открыьт в JVisualVM и посмотреть на список классов. В табе Instances ничего from the top of the list ( самого интересного) не открывается :sadcry: .

Это случай когда один из Kafka consumers начинаесть жрать много памяти и тормозить, потом в какой то момент много коммитов в Кафку с этой ситемы начинает падать и "все умерли". Пытаюсь понять почему из 40 боксов именно у этого проблемы, по идее все идет по принципу rounds Robin, надеялась посмотреть на object tree - ан нет, MAT, YourKit сразу упали с OOM, тока VisualVm что-то вымучил долго думв до того как
Чего то zk классов много. А по сабжекту - большие хипы на большом железе подымать а у mat надо jvm параметры поправить. Я обычно сервак берут с 64gb memory и на нем терзаю через ssh X-Forwarding.
Да, я посмотрела и для дампа в 17 GB надо 34 GB , а на лаптопе тока 16 :(
С кафкой там UNKNOWN_MEMBER_ID ошибка, как тут - https://issues.apache.org/jira/browse/KAFKA-2985" onclick="window.open(this.href);return false;
Теоретически понятно что какая то операция занумает слишком много времени ( скорее всего messages parsing/ messages (arrays) commit to Kafka) , heartbeat запаздывает, кластер начинает думать что нод упал со всемы вытекаюшими. zk классы обьяснимы.
Непонятно что именно переписать :). Какой именно message is too big or fecth too slow and why the hell this specific box out of 40 decided to be too slow
PS. Вот не зря у нас кто то в комментах написал // This is where kafaka broke multiple times :lol:
Last edited by Сабина on 05 Mar 2017 06:27, edited 1 time in total.
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

Palych wrote:
Сабина wrote: Это случай когда один из Kafka consumers начинаесть жрать много памяти и тормозить, потом в какой то момент много коммитов в Кафку с этой ситемы начинает падать и "все умерли". Пытаюсь понять почему из 40 боксов именно у этого проблемы,
Я бы предположил что она сначала начинает тормозить по какой-то причине, а из-за этого жрет память.
И расследовать бы попробовал timing отдельных операций, не обращая внимания на JVM...
Это все точно знаем. Each instance goes against several remote rest endpoints and fetches huge JSONs from response ( we have time breakdown of each http call and time spent in method). Но в собранном batch-e всегда mix of the messages и падает уже при попытке batch.commit
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13989
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

Сабина wrote: падает уже при попытке batch.commit
А commit в обычных условиях на этом ноде столько же занимает, или медленнее?
Наверное нужно отловить момент когда конкретный песец приходит (по графикам памяти и time spent in GC) и медитировать над логами, выискивать что случилось.
И еще - замерить производительность сетевых соединений.
Иногда тормоза может вызвать клиент, который не торопится читать ответы (сеть тормозит, или сам клиент), и они накапливаются...
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

Palych wrote:
Сабина wrote: падает уже при попытке batch.commit
А commit в обычных условиях на этом ноде столько же занимает, или медленнее?
Наверное нужно отловить момент когда конкретный песец приходит (по графикам памяти и time spent in GC) и медитировать над логами, выискивать что случилось.
И еще - замерить производительность сетевых соединений.
Иногда тормоза может вызвать клиент, который не торопится читать ответы (сеть тормозит, или сам клиент), и они накапливаются...
Так а что его отлавливать - момент когда память >95% четко отмечен, а так же и ошибки UNKNOWN_MEMBER_ID в логах. Вся загадка в том что все остальное BAU. Есть еше мысль enable zk or kafka debug, но это проишодт раз в сто лет - фиг отловишь. Вся надежда была на dump
https://www.youtube.com/watch?v=wOwblaKmyVw
kostik78
Уже с Приветом
Posts: 3180
Joined: 17 May 2007 14:07

Re: Garbage Collection

Post by kostik78 »

Сабина wrote:
Так а что его отлавливать - момент когда память >95% четко отмечен, а так же и ошибки UNKNOWN_MEMBER_ID в логах. Вся загадка в том что все остальное BAU. Есть еше мысль enable zk or kafka debug, но это проишодт раз в сто лет - фиг отловишь. Вся надежда была на dump
Обычно наличие исходников и dump достаточно чтобы разобраться в чем дело. Найдите сервак с большим обьемом памяти и настройте ssh X forwarding и вперед :) Думаю что найдете в чем дело.
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

kostik78 wrote:
Сабина wrote:
Так а что его отлавливать - момент когда память >95% четко отмечен, а так же и ошибки UNKNOWN_MEMBER_ID в логах. Вся загадка в том что все остальное BAU. Есть еше мысль enable zk or kafka debug, но это проишодт раз в сто лет - фиг отловишь. Вся надежда была на dump
Обычно наличие исходников и dump достаточно чтобы разобраться в чем дело. Найдите сервак с большим обьемом памяти и настройте ssh X forwarding и вперед :) Думаю что найдете в чем дело.
Я смогла открыть with jVisualVm , вижу что heap занят классами зукипера, к сожалению для того чтобы проследить three depednencies ( кто держит кого) надо рыться с исходниках зукипера, кафки и наших.

Кстати GCeasy.io рулит, но не то чтобы с GC log-ом что то было непонятно
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

kostik78 wrote:
Сабина wrote:
Так а что его отлавливать - момент когда память >95% четко отмечен, а так же и ошибки UNKNOWN_MEMBER_ID в логах. Вся загадка в том что все остальное BAU. Есть еше мысль enable zk or kafka debug, но это проишодт раз в сто лет - фиг отловишь. Вся надежда была на dump
Обычно наличие исходников и dump достаточно чтобы разобраться в чем дело. Найдите сервак с большим обьемом памяти и настройте ssh X forwarding и вперед :) Думаю что найдете в чем дело.
Костя, а вы знакомы с такой штукой
https://blogs.oracle.com/dholmes/entry/ ... concurrent" onclick="window.open(this.href);return false;

в частности со свойством - parallelLockMap ?

Из того что я вижу heap доминирован by instances of org.apache.zookeeper.proto.CreateResponse
последние имеют свойство classloader - > parallelLockMap
и в етой HashMap parallelLockMap сидят наши мессаджи которые приходят от системы, которая сильно глючила в последнее время ( то есть была задержка). Может GC потoму и запаздывает что пока весь Record не процессится он с хипа не пропадает ? А он не процессится потому что other remote system is slow (bottleneck)
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Вячеслав Викторович
Уже с Приветом
Posts: 5738
Joined: 13 Feb 2016 18:50
Location: Кемерово

Re: Garbage Collection

Post by Вячеслав Викторович »

Сабина wrote:
kostik78 wrote:
Сабина wrote:
Так а что его отлавливать - момент когда память >95% четко отмечен, а так же и ошибки UNKNOWN_MEMBER_ID в логах. Вся загадка в том что все остальное BAU. Есть еше мысль enable zk or kafka debug, но это проишодт раз в сто лет - фиг отловишь. Вся надежда была на dump
Обычно наличие исходников и dump достаточно чтобы разобраться в чем дело. Найдите сервак с большим обьемом памяти и настройте ssh X forwarding и вперед :) Думаю что найдете в чем дело.
Костя, а вы знакомы с такой штукой
https://blogs.oracle.com/dholmes/entry/ ... concurrent" onclick="window.open(this.href);return false;

в частности со свойством - parallelLockMap ?

Из того что я вижу heap доминирован by instances of org.apache.zookeeper.proto.CreateResponse
последние имеют свойство classloader - > parallelLockMap
и в етой HashMap parallelLockMap сидят наши мессаджи которые приходят от системы, которая сильно глючила в последнее время ( то есть была задержка). Может GC потoму и запаздывает что пока весь Record не процессится он с хипа не пропадает ? А он не процессится потому что other remote system is slow (bottleneck)
Ну это ж нормально. У нас аппликуха базируется на Spring Boot& Spring Integration и часть промежуточных результатов пишется в ElasticSearch.
Этот процесс достаточно быстрый, но всё же медленней чем сам расчёт. Поэтому, я пишу через очередь, чтобы развязать расчёт и запись реzультатов.
Иногда очередь раздувается до десятков миллионов сообщений и их надо где-то хранить. Поэтому я сделал -Xmx80G и не плачу.
У меня к завершению счёта уже все результаты в ElastcSearch и обычной базе, очередь снова пустая.
При неприемлимом времени ответа, можно написать/сконфигурировать reaper, который будет очередь по таймауту очищать.
В JDK8 потребности в fine tuning JVM не возникало, а в предыдущих таки были.
В JDK8 очень зачётная JMX консоль, мы довольно много косяков с её помощью нашли.
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

Спасибо Вячеслав, ваши слова подтвердили мои findings, правда лоадер там этот ни причем оказался. я вчера докопалась таки до сути
https://www.youtube.com/watch?v=wOwblaKmyVw
kostik78
Уже с Приветом
Posts: 3180
Joined: 17 May 2007 14:07

Re: Garbage Collection

Post by kostik78 »

Сабина wrote:Спасибо Вячеслав, ваши слова подтвердили мои findings, правда лоадер там этот ни причем оказался. я вчера докопалась таки до сути
Ну классно .. молодец ;)

Return to “Вопросы и новости IT”