장덕성입니다.
2주동안 저를 괴롭히던 부분이 해결되었습니다.
메모리 4기가 장비에서 200kb짜리 2만개가 넘어가면 메모리 full도 더이상 진행안되던것이 10만건이 넘어도 사전데이터 포함 1.3기가의 메모리를 유지하면서 색인을 하고 있습니다.
그동안 도움을 주셔서 감사합니다.
좀 정리를 해보면 아래와 같습니다.
elasticserch에서 analyzer를 custom으로 하고 bulk색인을 하면 실제적으로 lucene(org.apache.lucene.index > DocInvertedPerField.java)에 있는 processFields에서 MeCabKoTokenizer를 호출합니다.
순서는 MeCabKoTokenizer의 createTokenGenerator() 호출하고,
reset()을 하고,
do-while루프를 돌면서 incrementToken()을 수행하고,
끝나면 end() 실행 후 position, offset정보를 처리하고,
fillnaly에서 close()를 호출하고 끝이 납니다.
그런데,
mecab-ko-lucene-analyzer-0.16.1 --> MeCabKoTokenize.java에는 close가 없어
이를 추가하고 JNI에 정의되어 있는 tagger.delete(); lattice.delete(); 를 실행하도록 하였습니다.
이렇게 하고 나니 지속적으로 증가되던 현상이 없어졌습니다.
createTokenGenerator --> reset --> incrementToken --> end --> close의 순서를 따라가면서 메모리 체크를 한 결과입니다.
감사합니다.