设置mapred.job.map.memory.mb和mapred.child.java.opts使用-Xmx来控制Mapper和Reduce任务使用的最大内存有什么区别?哪个优先?
-Xmx
指定分配的jvm的最大堆空间。这是为对象分配保留的空间,由垃圾收集器管理。另一方面,mapred.job.map.memory.mb
指定Hadoop任务子进程允许的最大虚拟内存。如果超过最大堆大小,JVM抛出OutOfMemoryException。
JVM可能使用比最大堆大小更多的内存,因为它还需要空间来存储对象定义(permgen空间)和堆栈。如果进程占用的虚拟内存超过mapred.job.map.memory.mb
, hadoop将终止该进程。
所以一个不优先于另一个(它们测量内存使用的不同方面),但是-Xmx
是JVM的一个参数,mapred.job.map.memory.mb
是一个任务尝试可以使用的虚拟内存的硬上限,由hadoop强制执行。
希望这是有帮助的,记忆是复杂的!我现在很困惑,为什么我的JVM进程在我的SO帖子中使用了虚拟内存中最大堆大小的几个倍。