Opengrok 큰 프로젝트 인덱싱 설정하기
안녕하세요. 전에 하기의 글을 올려드린적이 있습니다.
https://blog.djjproject.com/634
큰 프로젝트의 경우 인덱싱 중에 힙이 터져서 안되거나, 에러가 발생하는 경우가 있습니다.
특이 에러가 발생하면 하기와 같은 에러가 발생합니다.
이런 경우가 발생하는 부분에 대해서 해결 방법을 알아보도록 하겠습니다.
일단은 하기의 방법은 무식하게 메모리 양을 늘리는 것으로 JVM에 대한 이해가 없음을 미리 말씀 드립니다.
1. 현재 사용 시스템
현재 사용하는 시스템은 16코어 / 64기가 제품입니다.
인덱싱을 밤10시에 진행하기 때문에 64기가를 인덱싱하는데에 모두 사용해도 되나, 실제로 64기가들 다 쓰게 되면 SWAP으로 넘어가는 일이 생겨, 더욱 더 작업이 느려집니다.
2. 인덱싱 설정
JVM의 xmx 옵션을 48기가로 설정하고, 인덱싱 시에 메모리 캐쉬를 64기가로 설정합니다.
메모리 캐쉬는 JVM 옵션이 아니고, opengrok-indexer 의 옵션으로 인덱싱이 조금 더 빠르게 실행될 수 있도록 하는 것입니다.
xms 와 xmx 를 둘 다 설정할 수 있겠지만, 성능 튜닝을 제대로 할 것이 아니라서 최대값만 지정해줍니다.
전에 인덱싱 관련으로 코드를 작성한게 있습니다.
하기와 같습니다.
# 오리지널 인덱싱 커맨드 java -Djava.util.logging.config.file=/opengrok/etc/logging.properties -jar /opengrok/dist/lib/opengrok.jar -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -H -P -S -G -W /opengrok/etc/configuration.xml -U http://localhost:10000/source # 메모리 옵션 추가 인덱싱 커멘드 java -Xmx48g -Djava.util.logging.config.file=/opengrok/etc/logging.properties -jar /opengrok/dist/lib/opengrok.jar -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -m 65536 -H -P -S -G -W /opengrok/etc/configuration.xml -U http://localhost:10000/opengrok |
3. tomcat 자체 메모리 설정
마찬가지로 heap 설정을 진행합니다.
일단 제가 현재 컨테이너에 구동을 하고 있어서, sysvinit 형태로 수정하고 있습니다. systemd는 조금 다를까 싶기도 한데요. 일단 하기와 같습니다.
root@djjproject:/home# vi /etc/init.d/tomcat8 # Use the Java security manager? (yes/no) TOMCAT8_SECURITY=no # Default Java options # Set java.awt.headless=true if JAVA_OPTS is not set so the # Xalan XSL transformer can work without X11 display on JDK 1.4+ # It also looks like the default heap size of 64M is not enough for most cases # so the maximum heap size is set to 128M # if 구문에 코멘트 처리하고 강제로 먹도록 설정합니다. #if [ -z "$JAVA_OPTS" ]; then JAVA_OPTS="-Djava.awt.headless=true -Xmx48G" #fi # End of variables that can be overwritten in $DEFAULT # overwrite settings from default file if [ -f "$DEFAULT" ]; then |
4. 마치며..
상기 2가지 옵션을 적용하면 제가 사용하는 영역에서는 크게 문제가 없었습니다.
혹시 추후에 문제가 발생하면 업데이트 하도록 하겠습니다.
감사합니다.