我们有两个版本相同的CDH集群(CDH-5.5.2-1.cdh5.5.2.p0.4),每个集群的ResourceManager都配置相同。
其中一个ResourceManager运行良好,随着时间的推移,它的堆内存保持恒定值(例如800mb)。
但另一个会抛出OOM异常并在15天后退出。当我们使用'jmap -F -histo'来转储它的jvm堆信息时,我们看到对象'char []'的大小随着时间的推移而增长,并最终抛出OOM。
以下是良好RM和OOM RM的jvm转储结果的关键信息:
dump cmd:jmap -F -histo pid
A)群集A中的良好RM的jvm转储 [我们看到40w + char []实例有60m +堆mem] [1]
B)群集B中的bak RM(OOM)的jvm转储 [我们看到30w + char []实例,但400m +堆mem] [2]
任何帮助都将不胜感激。
我们今天转储(jmap -F -dump:file = file.dump_result pid)堆信息,并使用MAT(内存分析工具)来分析转储文件,我们发现实例变量应用程序 org.apache.hadoop.yarn.server.resourcemanager.RMActiveServiceContext 中的(java.util.concurrent.ConcurrentHashMap)占用了大量内存: