0

我的 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 文件

4

3 回答 3

0

要分析您的应用程序的内存使用情况(不仅包括 Java 堆),您可以使用这个答案

您的大多数匿名块的大小都很接近。在大多数情况下,很多匿名者都在谈论线程。如果您在 ActiveMQ 中有很多目的地,您可能有很多线程。但是你的匿名块的大小并不接近线程堆栈大小。所以它可能不是线程,我想。

请注意,15Gb 对于 ActiveMQ 非常高,有时对于 Java 也是如此,它可能会非常强烈地影响 GC。您可以在此处此处阅读如何为系统内存使用配置 ActiveMQ 。

于 2017-09-20T10:20:45.680 回答
0

我可以确认 ActiveMQ 无法使用比您使用 -Xmx 配置的更多的 JVM 堆。ActiveMQ 是 100% Java,因此代理不会使用除 JVM 之外的其他堆内存。

要了解实际使用了多少 Java 堆,请查询 JVM 的 JMX 统计信息,它应该始终保持在配置的限制范围内。

我不熟悉 pmap,所以我不能真正评论那部分,但想知道 top 命令给你什么数字?

于 2017-09-05T07:33:32.880 回答
0

我从你在 Unix 上运行的 RSS 的参考中得到它——不确定那是否是 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 给我的内存数字(3GB)比 smem PSS(实际上是 RSS)(~200M)高得多

于 2017-09-20T10:16:07.743 回答