hadoop运行map进程内存占用过大
时间: 2024-01-26 07:02:47 浏览: 188
Java程序因为自己维护堆的使用,导致调用glibc去管理内存的次数较少。而在Java 8中,使用metaspace原空间取代了永久代,元空间存放在操作系统本地内存中。每个线程都要使用一点元空间,每个线程都分配一个arena,每个都是64MB。所以在多线程程序中,会有相当多的64MB的arena被分配。可以通过环境变量MALLOC_ARENA_MAX来控制arena的数量,默认值是128。如果hadoop运行的map进程内存占用过大,可能是因为每个线程分配了64MB的arena,导致了巨大的虚拟地址被分配。这个问题是由glibc在版本2.10引入的arena新功能所导致的。CentOS 6/7的glibc大都是2.12/2.17,所以都会受到这个问题的影响。这个功能旨在为每个线程分配一个本地arena来加速多线程的执行。
阅读全文