【发布时间】:2017-09-04 21:38:58
【问题描述】:
我的 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文件here
【问题讨论】:
-
匿名块可以是线程堆栈。线程转储 (jstack) 可能会提供更多信息。我很想知道您为什么需要设置 Xmx=15Gb——这对于消息代理来说非常高。
-
亲爱的 kevin 很高兴你回复了。当您在 RedHat 时,我们之前曾合作过。我们提供了 Xss 512k 来减少线程的堆栈大小。我提供了 15Gb 以确保 AMQ 拥有所需的所有堆,因为我们正在处理非常大量的数据。
-
尝试通过 Xss 减少线程数 256K 添加 -Dorg.apache.activemq.UseDedicatedTaskRunner=FALSE 并设置 optimizedDispatch=true。这在启动时将线程数从 257 减少到 85,但即使在没有任何消息的情况下启动时,glance 命令仍显示 RSS 489mb 和 VSS 25gb。随着时间的推移,值会上升到 RSS 40gb 和 VSS 52gb,有 400 个线程并且没有设置 Xss。
-
我仍然在 Red Hat ——我们正在关闭我们专有的公共论坛并转移到 StackOverflow。但是,如果您仍然可以的话,这看起来像是一个您应该提出支持票的问题。即使数据吞吐量很大,ActiveMQ 也不应该使用大量堆,除非您实际上正在处理非持久(内存中)消息。使用具有默认值 pre-fetch(通常为 1000)的大型(兆字节)消息将占用堆,以及导致大量线程产生的事情。这种情况确实需要详细分析堆和线程转储。
-
不能再提高票证了。这里的问题是堆是正常的,但仍在消耗大量内存。
标签: java activemq heap-memory amq