Java Runtime Environment没有足够的内存来继续hbase

时间:2015-09-04 08:54:53

标签: java hadoop jvm hbase

我已经完成了与类似问题相关的所有答案,但我无法得出关于我的Java代码或Hbase配置中的问题的结论。所以我再次发布这个问题。我在Hbase中遇到了轰鸣声错误。我有3个用于Hadoop集群的VM。

主节点 - 3 GB RAM

Datanode 1 - 7 GB RAM

Datanode 2 - 7 GB RAM

我的Java程序在Hbase主节点上运行,这个工作人员将数据插入到Hbase表中,大约在插入100k记录之后我得到了以下错误,Java程序和HMaster都停止了工作。

Java程序错误: -

  

OpenJDK 64位服务器VM警告:信息:   os :: commit_memory(0x00007fe05185c000,12288,0)失败;错误='不能   分配内存'(errno = 12)

     

Java Runtime Environment没有足够的内存   继续。本机内存分配(malloc)无法分配12288   用于提交保留内存的字节。

     

包含更多信息的错误报告文件保存为:

     

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

记录 hs_err_pid41813.log

  

处理器:1

     

vendor_id:AuthenticAMD

     

cpu family:16

     

型号:8

     

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

     

踩:1

     

microcode:0xffffffff

     

cpu MHz:2094.643

     

缓存大小:512 KB

     

物理ID:0

     兄弟姐妹:2

     

核心ID:1

     

cpu cores:2

     

apicid:1

     

最初的apicid:1

     

fpu:是的

     

fpu_exception:是的

     

cpuid等级:5

     

wp:是的

     

flags: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 size:64

     

cache_alignment:64

     

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

     

内存:4k页,物理3523172k(135048k免费),交换0k(0k免费)

     

vm_info:用于linux-amd64 JRE的OpenJDK 64位服务器VM(24.79-b02)   (1.7.0_79-b14),建于2015年7月24日08:15:54 by“buildd”with gcc   4.8.2

     

时间:2015年9月4日星期五06:43:48

     

已用时间: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>

2 个答案:

答案 0 :(得分:5)

你几乎没有空闲记忆而没有交换。

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

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

答案 1 :(得分: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进行验证