【问题标题】:There is insufficient memory for the Java Runtime Environment to continue hbaseJava Runtime Environment 内存不足,无法继续 hbase
【发布时间】:2015-11-30 08:55:11
【问题描述】:

我已经查看了与类似问题相关的所有答案,但我无法得出关于我的 Java 代码或 Hbase 配置中存在问题的结论。所以我再次发布这个问题。我在 Hbase 中遇到以下错误。我有 3 个用于 Hadoop 集群的虚拟机。

主节点 - 3 GB RAM

Datanode 1 - 7 GB RAM

Datanode 2 - 7 GB RAM

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

Java 程序错误:-

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

Java 运行时环境内存不足 继续。本机内存分配 (malloc) 分配失败 12288 用于提交保留内存的字节。

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

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

hs_err_pid41813.log

的日志

处理器:1

vendor_id : AuthenticAMD

cpu 系列:16

型号:8

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

步进:1

微码:0xffffffff

CPU 频率:2094.643

缓存大小:512 KB

物理ID:0

兄弟姐妹:2

核心编号:1

cpu 核心数:2

酸味:1

初始 apicid : 1

fpu:是的

fpu_exception:是的

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 系统调用 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 vmm调用

错误:tlb_mmatch apic_c1e fxsave_leak

bogomips : 4205.20

TLB 大小:1024 个 4K 页面

clflush 大小:64

缓存对齐:64

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

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

vm_info:用于 linux-amd64 JRE 的 OpenJDK 64 位服务器 VM (24.79-b02) (1.7.0_79-b14),由 gcc 的“buildd”于 2015 年 7 月 24 日 08:15:54 构建 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>

【问题讨论】:

  • Hbase Master 分配的堆大小是多少
  • 堆大小是 hbase 的默认值。

标签: java hadoop jvm hbase


【解决方案1】:

您几乎没有可用内存,也没有交换空间。

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

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

【讨论】:

  • 我没有关闭我的java程序中的htable对象,这是内存问题的原因吗?
  • 这可能会有所不同,但关键问题是你用完了虚拟内存(实际上是物理内存)这可能是目前的解决方案,但如果你接近极限,我会认真考虑添加一些交换空间。
【解决方案2】:

创建2G的Swap文件

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 进行验证

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2020-04-02
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多