Java运行环境内存不足,无法继续hbase。

3

我已经查看了所有与此类似的问题的答案,但是我无法确定问题是出在我的Java代码还是Hbase配置中。因此,我再次发布这个问题。我在Hbase中遇到以下错误。我有3个VMs用于Hadoop集群。

主节点 - 3 GB RAM

Datanode 1 - 7 GB RAM

Datanode 2 - 7 GB RAM

我的Java程序正在Hbase主节点上运行,该工作程序将数据插入Hbase表,并且在插入了大约100k条记录后,我得到了下面的错误,Java程序和HMaster都停止工作了。

Java程序错误:-

OpenJDK 64位Server VM警告:INFO:os::commit_memory(0x00007fe05185c000,12288,0)失败;错误='Cannot allocate memory' (errno=12)

Java运行时环境内存不足,无法继续执行。本机内存分配(malloc)未能为提交保留的内存分配12288字节。

附有更多信息的错误报告文件保存在:

/var/data/HadoopOperations/javaOperations/hs_err_pid41813.log

hs_err_pid41813.log日志

处理器: 1

供应商 ID: AuthenticAMD

CPU 家族: 16

型号: 8

型号名称: AMD Opteron(tm) 处理器 4171 HE

步进: 1

微码: 0xffffffff

CPU 频率: 2094.643

缓存大小: 512 KB

物理 ID: 0

同级处理器数量: 2

核心 ID: 1

CPU 核数: 2

APICID: 1

初始 APICID: 1

FPU: 是

FPU 异常: 是

CPUID 等级: 5

WP: 是

标志: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 popcnt hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw vmmcall

错误: tlb_mmatch apic_c1e fxsave_leak

Bogomips: 4205.20

TLB 大小: 1024 4K 页面

clflush 大小: 64

缓存对齐: 64

地址大小: 物理 42 位, 虚拟 48 位电源管理:

内存: 4k 页面, 物理 3523172k(135048k 可用), 交换空间 0k(0k 可用)

VM 信息: OpenJDK 64 位服务器 VM (24.79-b02) for linux-amd64 JRE (1.7.0_79-b14), 由 "buildd" 使用 gcc 4.8.2 在 Jul 24 2015 08:15:54 构建

时间: Fri Sep 4 06:43:48 2015

经过时间: 63099 秒

hbase-site.xml 配置

<configuration>
    <property>
            <name>hbase.rootdir</name>
            <value>hdfs://master:9000/hbase</value>
    </property> 

    <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
    </property>

    <property>
            <name>hbase.zookeeper.property.clientPort</name>
            <value>2181</value> 
    </property>

    <property>
            <name>hbase.zookeeper.quorum</name><value>master,datanodeone,datanodetwo</value>
    </property>

    <property>
            <name>hbase.client.scanner.caching</name>
            <value>10000</value>
    </property>

    <property>
            <name>hfile.block.cache.size</name>
            <value>0.6</value> 
    </property> 

    <property>
            <name>hbase.regionserver.global.memstore.size</name>
            <value>0.2</value> 
    </property>         
 </configuration>

Hbase Master分配的堆大小是多少? - Wazy
堆大小已恢复为 HBase 的默认值。 - 3ppps
2个回答

5

您的可用内存和交换空间几乎为零。

physical 3523172k(135048k free), swap 0k(0k free)

最简单的解决方法是添加一些交换空间,我建议至少4 GB,最多16 GB。


我在我的Java程序中没有关闭htable对象,这是导致内存问题的原因吗? - 3ppps
这可能会有所帮助,但关键问题是你的虚拟内存(以及实际内存)已经用完了。现在这可能是解决方案,但如果你接近极限,我强烈建议添加一些交换空间。 - Peter Lawrey

0
创建一个2G的交换文件。
sudo dd if=/dev/zero of=/swapfile count=2048 bs=1MiB
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab

添加以下行: /swapfile swap swap sw 0 0

运行 swapon --showfree -h 进行验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接