线上的fsimage 有1.8G左右了,设置了6G heap 不够用了
新生代:老年代=1:2=2G: 4G
NameNode的内存主要由NameSpace和BlocksMap占用,其中NameSpace存储的主要是INodeFile和INodeDirectory对象,BlocksMap存储的主要是BlockInfo对象。则估算NameNode占用的内存大小也就是估算集群中INodeFile、INodeDirectory和BlockInfo这些对象占用的heap空间。
Java中常见数据结构占用的内存大小
下面先列举下java中常见数据结构占用的内存大小(64bit的jvm)
int = 4 bytes
long = 8 bytes
Reference size(引用) = 8 bytes
Object header size(对象头) = 16 bytes
Array header size(数组头) = 24 bytes
ArrayList header size(list头) = 24(数组头) + 4(属性size的大小) = 28 bytes
TreeMap.Entry = 64 bytes. (Entry的属性中有5个引用)
HashMap.Entry = 48 bytes. (Entry的属性有3个引用)
String header = 64 bytes.
1.去 hdfs ui 上看
19262510 files and directories, 14485600 blocks = 33748110 total filesystem object(s).
Heap Memory used 4.68 GB of 5.86 GB Heap Memory. Max Heap Memory is 5.86 GB.
33745283 * 150 bytes = 4.7G
2.大概用jmap 查看内存大概有 4.68Gb
$ jmap -histo:live 31366 | grep 'Total'
Total 84543039 4688976560
两者近似了,fsimage 大概在内存放大 2.6倍左右(当然内存中数据更多些,多了块与节点之间的映射)