slf4j 로드 에러 관련 질문입니다.

326 views
Skip to first unread message

Jungho Choi

unread,
Nov 18, 2016, 12:21:13 AM11/18/16
to 은전한닢 프로젝트
elasticsearch의 설치를 진행한 다음에
실행 예제로 나와 있는 script를 실행하였더니 slf4j 로딩과 관련하여 error가 발생하였습니다.

[elasticsearch 설치 버전]은 다음과 같습니다.

mecab of 0.996/ko-0.9.2
mecab-ko-dic-2.0.1-20150920
elasticsearch : 2.4.0
elasticsearch-analysis-seunjeon/2.4.0.0

[실행 스크립트]
#!/usr/bin/env bash

ES='http://localhost:9200'
ESIDX='seunjeon-idx'

curl -XDELETE "${ES}/${ESIDX}?pretty"
sleep 1
curl -XPUT "${ES}/${ESIDX}/?pretty" -d '{
  "settings" : {
    "index":{
      "analysis":{
        "analyzer":{
          "korean":{
            "type":"custom",
            "tokenizer":"seunjeon_default_tokenizer"
          }
        },
        "tokenizer": {
          "seunjeon_default_tokenizer": {
            "type": "seunjeon_tokenizer",
            "user_words": ["낄끼빠빠,-100", "버카충", "abc마트"]
          }
        }
      }
    }
  }
}'

sleep 1

echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '삼성전자'
echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '빨라짐'
echo "========================================================================"
curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '낄끼빠빠 어그로'

실행한 이후로 elasticsearch에서 다음과 같은 오류가 발생했습니다.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000df363000, 289165312, 0) failed; error='메모리를 할당할 수 없습니다' (errno=12)

slf4j를 로드하지 못한 문제인거 같은데... 어떻게 해결해야 할까요?
조언 부탁 드립니다.

유영호

unread,
Nov 18, 2016, 12:27:05 AM11/18/16
to 은전한닢 프로젝트
Elasticsearch heap 메모리가 부족한것같아요. Jvm 힙메모리 크기를 얼마로 잡으셨나요?

Jungho Choi

unread,
Nov 18, 2016, 2:08:06 AM11/18/16
to 은전한닢 프로젝트
따로 heap 메모리 설정은 하지 않았습니다.
aws에서 테스트 하는거라서 메모리가 많지 않은 서버입니다.

elasticsearch가 로드될때 표시되는 log에서 아래와 같이 나타내고 있습니다.
[Mother Superior] heap size [1015.6mb], compressed ordinary object pointers [true]

Jvm 힙메모리를 수정해보겠습니다.

유영호

unread,
Nov 18, 2016, 2:22:57 AM11/18/16
to 은전한닢 프로젝트
ps afx 로 -Xmx설정 어떻게 되어있는지 보면 힙사이즈를 알수있을것같아요.

Jungho Choi

unread,
Nov 18, 2016, 2:54:10 AM11/18/16
to 은전한닢 프로젝트
말씀하신대로 확인해서 보았더니 -Xms256m -Xmx1g 이렇게 설정이 되어 있네요.
그런데 해당 서버의 남은 메모리가 1g까지 충분치 않아서 다음과 같이 450mb로 한정해서 설정하고 다시 테스트 하였습니다.
export _JAVA_OPTIONS=-Xmx450m

실행했더니 java.lang.OutOfMemoryError: Java heap space 오류가 나네요.

[server]
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6432.hprof ...
Heap dump file created [634361540 bytes in 7.950 secs]
[2016-11-18 07:49:03,475][DEBUG][action.admin.indices.analyze] [Mister Fear] null: failed to execute [org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest@188024ca]
RemoteTransportException[[Mister Fear][52.78.83.67:9300][indices:admin/analyze[s]]]; nested: OutOfMemoryError[Java heap space];
Caused by: java.lang.OutOfMemoryError: Java heap space

[client - curl]
========================================================================
{
  "error" : {
    "root_cause" : [ {
      "type" : "remote_transport_exception",
      "reason" : "[Mister Fear][52.78.83.67:9300][indices:admin/analyze[s]]"
    } ],
    "type" : "out_of_memory_error",
    "reason" : "Java heap space"
  },
  "status" : 500
}

혹시 은전한닢을 구동하기 위해서는 서버의 기본 메모리 스펙이 어느정도 인지 알 수 있을까요?

유영호

unread,
Nov 18, 2016, 3:12:36 AM11/18/16
to 은전한닢 프로젝트
색인크기나.. 다른 환경에 따라 달라서.. 딱 얼마가 필요하다고 말씀드리기는 어렵습니다.
그래도 물리 메모리가 1g라면.. (느낌상) 서버가 뜨긴 할 것 같긴한데요. 물론 성능 보장은 어려워보입니다.

그리고  export _JAVA_OPTIONS=-Xmx450m 로 설정하면 elasticsearch jvm heap size 설정이 먹히나요? https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html 여기보면 export ES_HEAP_SIZE=10g 로 하라고 가이드가 되어있거든요..

Jungho Choi

unread,
Nov 18, 2016, 4:24:49 AM11/18/16
to 은전한닢 프로젝트
export _JAVA_OPTIONS=-Xmx450m로 해도 로딩할때 elasticsearch jvm heap size가 바뀌긴 하는데요.
말씀하신대로 가이드대로 진행하는게 좋을 것 같네요..

혹시나 해서 elasticsearch를 다시 설치하고(rpm 으로) ES_HEAP_SIZE=400m으로 설정한 다음에 테스트를 추가로 해봤습니다.

그랬더니 아래와 같은 오류가 발생하네요...

Caused by: java.lang.IllegalStateException: unread block data
        at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2449)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1385)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
        at org.bitbucket.eunjeon.seunjeon.LexiconDict.load(LexiconDict.scala:234)
        at org.bitbucket.eunjeon.seunjeon.LexiconDict.load(LexiconDict.scala:215)
        at org.bitbucket.eunjeon.seunjeon.Analyzer$.initTokenizer(Analyzer.scala:24)
        at org.bitbucket.eunjeon.seunjeon.Analyzer$.tokenizer$lzycompute(Analyzer.scala:21)
        at org.bitbucket.eunjeon.seunjeon.Analyzer$.tokenizer(Analyzer.scala:21)
        at org.bitbucket.eunjeon.seunjeon.Analyzer$.setMaxUnkLength(Analyzer.scala:52)
        at org.bitbucket.eunjeon.seunjeon.elasticsearch.TokenBuilder$.setMaxUnkLength(TokenBuilder.scala:37)
        at org.bitbucket.eunjeon.seunjeon.elasticsearch.TokenBuilder.setMaxUnkLength(TokenBuilder.scala)
        at org.bitbucket.eunjeon.seunjeon.elasticsearch.SeunjeonTokenizer.<init>(SeunjeonTokenizer.java:32)
        at org.bitbucket.eunjeon.seunjeon.elasticsearch.index.analysis.SeunjeonTokenizerFactory.create(SeunjeonTokenizerFactory.java:60)
        at org.elasticsearch.index.analysis.CustomAnalyzer.createComponents(CustomAnalyzer.java:83)
        at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:101)
        at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:176)
        at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.simpleAnalyze(TransportAnalyzeAction.java:240)
        at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:225)
        at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:63)
        at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(TransportSingleShardAction.java:282)
        at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(TransportSingleShardAction.java:275)
        at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33)
        at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:77)
        at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

유영호

unread,
Nov 18, 2016, 4:45:19 AM11/18/16
to 은전한닢 프로젝트
뭔가 class path 가 꼬인느낌이 드네요. jar파일안에 있는 사전을 읽지 못하는 상황같아요..

성열우

unread,
Nov 21, 2016, 8:49:56 AM11/21/16
to 은전한닢 프로젝트
저도 동일한 에러가 발생하네요! 메모리도 1기가 정도라서 그런지 비슷한 현상인 것 같습니다!

Yong-woon Lee

unread,
Nov 21, 2016, 9:18:11 AM11/21/16
to eun...@googlegroups.com
총 메모리 1G 로는 ElasticSearch +  seunjeon 사용이 힘들 것으로 보입니다. 형태소 분석기가 사용하는 메모리 양이 꽤되어서 (수백메가 정도), 절대적으로 메모리가 부족해 보여요.
메모리를 최소 2G 정도로 늘려보시는 것을 추천드립니다.
Reply all
Reply to author
Forward
0 new messages