问题描述
我的问题是:通过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
直连: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 (将#修改为@)