Использование памяти activemq в 4 раза превышает выделенную максимальную кучу

Ниже приведена конфигурация для моего процесса Java Actvemq, где Xmx составляет 15360M, но когда я вижу использование процесса памятью с помощью glance, я вижу RSS 41.8gb и VSS 51.6gb . pmap |grep total дает мне всего 54059348K. Я не уверен, что происходит в activemq, что вызывает использование такого большого количества памяти. При этом использование кучи довольно низкое - до 60%.

В выводе pmap я вижу много аноновых блоков. Пожалуйста, найдите прикрепленный выход PMAP

/XXXXX 111922      1 22 14:30 pts/0    00:04:26 
/u/users/user/jdk1.7.0_71/bin/java -Xms1024M -Xmx15360M -Xss512K 
-XX:+UseG1GC -XX:NewRatio=4 -XX:InitiatingHeapOccupancyPercent=45 
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/x/logs/AMQGC.log 
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=20M 
-Djava.util.logging.config.file=logging.properties 
-Djava.security.auth.login.config=/u/users/user/POSInterfaces/apache-activemq-5.13.2//conf/login.config 
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote 
-Djava.awt.headless=true 
-Djava.io.tmpdir=/u/users/user/POSInterfaces/apache-activemq-5.13.2//tmp 
-Dactivemq.classpath=/u/users/user/POSInterfaces/apache-activemq-5.13.2//conf:/u/users/user/POSInterfaces/apache-activemq-5.13.2//../lib/: 
-Dactivemq.home=/u/users/user/POSInterfaces/apache-activemq-5.13.2/ 
-Dactivemq.base=/u/users/user/POSInterfaces/apache-activemq-5.13.2/ 
-Dactivemq.conf=/u/users/user/POSInterfaces/apache-activemq-5.13.2//conf 
-Dactivemq.data=/u/users/user/POSInterfaces/apache-activemq-5.13.2//data 
-jar /u/users/user/POSInterfaces/apache-activemq-5.13.2//bin/activemq.jar 
start/ 

Пожалуйста, найдите файл pmap здесь

3 ответа

Я беру это из ссылки на RSS, что вы работаете в Unix - не уверен, что это Linux.

Мне интересно, стоит ли вам смотреть на PSS (размер пропорционального набора), а не на RSS (размер резидентного набора) - посмотрите этот вопрос по памяти для Unix и Linux - я обнаружил, что smem - отличный инструмент для оценки фактического использования памяти.

Например - для процесса ActiveMQ на моем сервере (устанавливается с -Xmx512m)

[user@vm ~]$ sudo pmap 13727 | grep total
 total          3161064K

[user@vm ~]$ sudo smem | grep -e '13727' -e 'PSS'
  PID User     Command                         Swap      USS      PSS      RSS
13727 activemq /usr/bin/java -Xms64M -Xmx1        0   212604   214962   229468

т. е. pmap дает мне гораздо более высокий показатель памяти (3 ГБ), чем Smem PSS (и действительно RSS) (~200 МБ)

Я могу подтвердить, что ActiveMQ не может использовать больше кучи JVM, чем вы конфигурируете с помощью -Xmx. ActiveMQ на 100% состоит из Java, поэтому брокером не будет использоваться никакая другая кучная память, кроме памяти JVM.

Чтобы выяснить, насколько реально используется куча Java, запросите статистику JMX JVM, она всегда должна оставаться в пределах настроенного предела.

Я не знаком с pmap, поэтому не могу прокомментировать эту часть, но мне интересно, какие цифры дает вам команда top?

Чтобы профилировать использование памяти вашего приложения (включая не только Java Heap), вы можете использовать этот ответ.

Большинство ваших аноновых блоков имеют близкие размеры. В большинстве случаев много анонов говорят о темах. У вас может быть много потоков, если у вас много направлений в ActiveMQ. Но размеры ваших аноновых блоков не близки к размеру стека потоков. Так что это могут быть не темы, я полагаю.

Обратите внимание, что 15Gb очень высока для ActiveMQ, а иногда и для Java, это может сильно повлиять на GC. Вы можете прочитать, как настроить ActiveMQ для использования системной памяти здесь и здесь.

Другие вопросы по тегам