Запутанное использование памяти Zookeeper - PullRequest
0 голосов
/ 20 мая 2018

У меня есть экземпляр zookeeper, который работал некоторое время ... (Java 1.7.0_131, ZK 3.5.1-1), с -Xmx10G -XX:+UseParallelGC.

Недавно произошла смена руководства, ииспользование памяти в большинстве случаев в кворуме увеличилось с ~ 200 МБ до 2 ГБ +.Я взял jmap дамп, и мне показалось интересным то, что было много byte[] данных сериализации (> 1 ГБ), которые не имели корня GC, но не были собраны.

(Это ByteArrayOutputStream, DataOutputStream, org.apache.jute.BinaryOutputArchive или HeapByteBuffer, BinaryOutputArchive).

Глядя на журнал gc, незадолго до изменения выборов полный GC выполнялся каждые 4 года.-5 минут.После выборов порог владения увеличивается с 1 до 15 (не более), и полный сборщик мусора запускается все реже и реже, в конце концов он даже не запускается в некоторые дни.

Через несколько дней, внезапно и таинственнодля меня что-то меняется, и объем памяти снова падает до ~ 200 МБ при работе Full GC каждые 4-5 минут.

Что меня смущает, так это то, что на такой памяти не может быть Root GC, ине получить полный GC.Я даже несколько раз пытался вызвать GC.run из jcmd.

Я задавался вопросом, удерживает ли что-то на родной земле ЗК эту память или протекает эту память ... что могло бы это объяснить.

Я ищу любые предложения по отладке;Я планирую обновить Java 1.8, может быть, ZK 3.5.4, но очень хотел бы узнать причину, прежде чем двигаться дальше.

До сих пор я использовал visualvm, GCviewer и Eclipse MAT.

JVM Max Memory Usage GC Log View (Сплошные вертикальные черные линии заполнены GC. Желтый - молодое поколение).

1 Ответ

0 голосов
/ 23 мая 2018

Я не эксперт по ЗК.Однако я некоторое время настраивал JVM в Weblogic и, основываясь на этой информации, чувствую, что ваша конфигурация вызывает расширение и сжатие куч (-Xmx10G -XX: + UseParallelGC).Таким образом, возможно, вам следует попробовать использовать -Xms10G и -Xmx10G, чтобы избежать такого изменения размера.Важно отметить, что при каждом изменении размера JVM выполняется полный сборщик мусора, поэтому избегание этого процесса является хорошим способом минимизации количества полных сборок мусора.

Пожалуйста, прочитайте это

"КогдаJVM Hotspot запускается, куча, молодое поколение и пространство поколения perm распределяются по своим начальным размерам, определяемым параметрами -Xms, -XX: NewSize и -XX: PermSize соответственно, и увеличиваются по мере необходимости до максимально зарезервированногоsize, которые составляют -Xmx, -XX: MaxNewSize и -XX: MaxPermSize. JVM может также уменьшить реальный размер во время выполнения, если память не нужна так, как изначально было указано. Однако каждое действие по изменению размера вызываетПолная сборка мусора (GC) и, следовательно, влияет на производительность . Рекомендуется, чтобы начальный и максимальный размеры были идентичными "

Источник: http://www.oracle.com/us/products/applications/aia-11g-performance-tuning-1915233.pdf

Если бы вы могли предоставить свой gc.log, было бы полезно тщательно проанализировать этот случай.

С уважением, RCC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...