linux java Cannot allocate memory

登录hbase shell的时候,给balabala报一堆错:

[xxx@hive001 lei.wang]$ hbase shell
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fc856e00000, 33285996544, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 33285996544 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/xxx/lei.wang/hs_err_pid21926.log

赶紧查查问题吧。结合报错的提示,最直接的感受,可能是服务器的内存不够用了。赶紧查一把内存的使用情况:

[xxx@hive001 lei.wang]$ free -m
             total       used       free     shared    buffers     cached
Mem:         32060      22116       9943          0        256       7389
-/+ buffers/cache:      14470      17589
Swap:        16383        860      15523

尼玛。。。内存还大把大把有。看来,应该不是内存不足的原因。

上google查一把,有不少类似的情况。

http://stackoverflow.com/questions/20687517/cannot-allocate-memory-errno-12-errors-during-runtime-of-java-application

总结一下上面的情况,有反应java版本的问题,有反应jvm参数设置问题。可惜俺的账号木有权限,只能找管理机器的同学帮忙了。

运维同学用此账号也无法登陆,但是用root账号登陆就木有问题。尼玛。搞什么鬼。
不过这下问题基本明确了,十有八九是哪个系统变量的配置问题。

最后问题定位如下:
因为历史原因,服务器上装有两套hdfs系统。用过hbase的亲们都了解,hbase的底层存储,一般是依赖于hdfs的。
查看一下xxx账号下的.bashrc文件,

export JAVA_HOME=/home/xxx/local/jdk1.7.0_75
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libexport:$JRE_HOME/lib:$CLASSPATH
export LD_LIBRARY_PATH=$JRE_HOME/lib/amd64/server:$LD_LIBRARY_PATH
export PATH=$JAVA_HOME/bin:$PATH

export HADOOP_HOME="/home/xxx/local/hadoop-2.5.0"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=$HADOOP_HOME/lib
export CLASSPATH=$HADOOP_CLASSPATH/*:$CLASSPATH
export LIBRARY_PATH=$LIBRARY_PATH:$HADOOP_HOME/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HODOOP_HOME/lib/native
export PATH=$HADOOP_HOME/bin:$PATH

但是root账号里的配置如下:

export HADOOP_HOME="/usr/lib/hadoop"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=$HADOOP_HOME/lib

很明显,HADOOP_HOME的配置不一样,hbase启动的时候必然找不到hdfs,JVM必然无法给分配内存。
将xxx账号的.bashrc与hadoop相关的配置修改为跟root一样以后,顺利启动hbase shell。

你可能感兴趣的:(shell,hbase,memory)