我在集群上运行 Hadoop map reduce 作业。 我收到这个错误。
OpenJDK 客户端 VM 警告:信息:os::commit_memory(0x79f20000, 104861696, 0) 失败; error='无法分配内存' (errno=12)
Java Runtime Environment 内存不足,无法继续运行。
本机内存分配 (malloc) 未能分配 104861696 字节用于提交保留内存。
怎么办?
确保你的机器上有
swap
空间
ubuntu@VM-ubuntu:~$ free -m
total used free shared buffers cached
Mem: 994 928 65 0 1 48
-/+ buffers/cache: 878 115
Swap: 4095 1086 3009
注意
Swap
线。
我刚刚在一个弹性计算实例上遇到了这个问题。事实证明默认情况下未安装交换空间。
您可以尝试通过传递这些运行时参数来增加内存分配大小。
例如:
java -Xms1024M -Xmx2048M -jar application.jar
您为 JVM 使用的参数可能会导致容器内存溢出
检查是否属性:
yarn.nodemanager.resource.memory-mb
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
on yarn.xml 匹配所需的值。
更多内存参考,阅读:
注意:这是针对 Hadoop 2.0 的,如果您运行的是 hadoop 1.0,请检查任务属性。
对我来说,可用内存小于 jvm 所需的内存,这导致“Java 运行时环境的内存不足,无法继续”。
检查您的可用内存:
free -h
停止一些无用的进程并获得更多内存。