프로그래밍/검색

엘라스틱검색 에러 - java.lang.OutOfMemoryError: Java heap space

kugancity 2015. 6. 27. 17:45
반응형



참고: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/heap-sizing.html

 



엘라스틱서치를 사용하면서 가장 많이 보는 에러중에 하나가 Java heap space 에러이다.

아래는 로그 파일에서 확인할 수 있는 Java heap space 에러 메세지이다. 


 

[Eel] Caught exception while handling client http traffic, closing connection 
  2 java.lang.OutOfMemoryError: Java heap space
  3     at org.elasticsearch.common.netty.buffer.HeapChannelBuffer.<init>(HeapChannelBuffer.java:42)
  4     at org.elasticsearch.common.netty.buffer.BigEndianHeapChannelBuffer.<init>(BigEndianHeapChannelBuffer.java:34)
  5     at org.elasticsearch.common.netty.buffer.ChannelBuffers.buffer(ChannelBuffers.java:134)
  6     at org.elasticsearch.common.netty.buffer.HeapChannelBufferFactory.getBuffer(HeapChannelBufferFactory.java:68)
  7     at org.elasticsearch.common.netty.buffer.CompositeChannelBuffer.copy(CompositeChannelBuffer.java:568)
  8     at org.elasticsearch.common.netty.buffer.AbstractChannelBuffer.copy(AbstractChannelBuffer.java:523)
  9     at org.elasticsearch.common.netty.handler.codec.http.HttpChunkAggregator.appendToCumulation(HttpChunkAggregator.java:208)
 10     at org.elasticsearch.common.netty.handler.codec.http.HttpChunkAggregator.messageReceived(HttpChunkAggregator.java:175)
 11     at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
 12     at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
 13     at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
 14    

 


위와같은 에러가 발생하면 엘라스틱검색이 사용하고 있는 메모리 사이즈를 확인한다. 

 

 

# ps afx | grep elastic
18177 pts/0    S+     0:00                      \_ grep elastic
19926 ?        Sl    90:40 /usr/lib/jvm/jdk1.7.0_45/bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly XX:+HeapDumpOnOutOfMemoryError -Delasticsearch




기본 설정이었던 최대 메모리가 1기가로 설정되어 있어 

메모리가 작아 에러가 생긴 것이다. 


  top을 쳐서 가용 메모리를 확인한다.


 

top - 17:51:15 up 129 days,  8:41,  1 user,  load average: 0.18, 0.07, 0.02
Tasks: 186 total,   1 running, 185 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.1%sy,  0.0%ni, 97.1%id,  0.1%wa,  0.0%hi,  2.4%si,  0.0%st
Mem:   2058540k total,  1931404k used,   127136k free,   126036k buffers
Swap:  1048568k total,   262252k used,   786316k free,   569492k cached

 


보통 가용 메모리의 반을 엘라스틱검색에 설정하는데 

지금 사용하는 리눅스 가상서버의 전체 가용 메모리가 2기가밖에 되지 않아 

더이상 메모리를 늘려도 조금 더 사용하면 또 메모리 에러날 것 같다. 


그냥 윈도우 서버에 다시 깔아서 해야할 듯 ㅠㅠ



 참고로  메모리 설정 방법 변경 방법은 간단하다. 

아래와 같이 시작 스트립트를 하나 만들어서 ES_HEAP_SIZE 환경 변수를 설정하고 

엘라스틱서치를 시작하면 된다.  

 

 

 

#!/bin/bash

export ES_HEAP_SIZE=4g
./elasticsearch -Des.max-open-files=true -d

 







 


 

728x90
반응형