微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

生产环境下Rocketmq broker进程内存比例问题

如何解决生产环境下Rocketmq broker进程内存比例问题

我的问题是:通过Linux系统命令查看的内存使用量和java内存各个区域的总使用量,以及哪个区域在使用内存之间存在巨大差异。

版本:

java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12,mixed mode)

rocketMq version : 4.5.1

CentOS Linux release 7.4.1708 (Core)

ps aux|grep java :

root 1408 4.4 60.7 33395552 19596884 ? Sl Mar22 7734:05 /bin/java -server -xms1g -Xmx2g -Xmn1g -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX: SoftRefLRUPolicyMSPerMB=0 -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles= 5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPretouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -Djava.ext.dirs=/jre/ lib/ext:/data/mq/rocketmq-all-4.5.1-bin-release/bin/../lib -cp .:/data/mq/rocketmq-all-4.5.1-bin-release/bin/ ../conf: org.apache.rocketmq.broker.brokerStartup autocreateTopicEnable=true -c /data/mq/rocketmq-all-4.5.1-bin-release/conf/2m-noslave/broker -a.属性

PID:1408

顶部:

PID USER PR NI VIRT RES SHR S %cpu %MEM TIME+ COMMAND

1408 根 20 0 31.848g 0.018t 1.399g S 10.0 60.8 7734:02 java

RES:0.018t

cat /proc/1408/status |grep 虚拟机:

VmPeak: 37749060 kB
VmSize: 33395552 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:  22155452 kB
VmRSS:  19603060 kB
VmData: 27929052 kB
VmStk:       132 kB
VmExe:         4 kB
VmLib:     19900 kB
VmPTE:     43660 kB
VmSwap:        0 kB

VmRSS:19603060 kB -> ~18G

我用上面的系统命令确定broker进程内存占用18G左右

分配给java的实际堆空间最大为2G -xms1g -Xmx2g -Xmn1g

jstat -gc 1408 :

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

0.0 16384.0 0.0 16384.0 1097728.0 98304.0 442368.0 246238.9 79996.0 78497.1 10136.0 9709.5 80728.0 98304.0 442368.0 78497.1 10136.0 9709.5 80728.5 80728.0 307

305 801307

超频:432M S0C + S1C: 32M 电码: 1072M 主控: 78M CCSC: 9.8M

然后通过arthas工具:查看DirectMemory

enter image description here

直连:4M 映射: 5154M

由上可知,java占用的内存大致为:

Javaheap + 元空间 + 线程数(217) * 256k + 代码缓存 + 直接内存 = 2 * 1024 + 78 + 217*256/1024 + 9.8 + 5 = 2194.8

即使包含mapped 5154M,java进程也只有7348.8M

18G占比差异巨大。

这里的 10G+ 差距是多少?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。