-
엘라스틱검색 에러 - java.lang.OutOfMemoryError: Java heap space프로그래밍/검색 2015. 6. 27. 17:45728x90반응형
참고: 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반응형'프로그래밍 > 검색' 카테고리의 다른 글
elasticsearch - failed to delete index (0) 2015.07.23 윈도우 서버 2012에 엘라스틱검색 1.6 설치하기 (0) 2015.06.28 curl: (1) Protocol 'http not supported or disabled in libcurl (0) 2015.02.07 [elasticsearch] open / close /delete index (0) 2015.01.25 [ elasticsearch] HTTP content length exceeded 104857600 bytes. (2) 2015.01.13