메모리 설정

개요

Java 애플리케이션에서는 프로세스마다 사용할 최대 힙 메모리를 설정해야 합니다. Fess 에서는 다음 3개의 컴포넌트에서 각각 메모리 설정을 수행합니다.

  • Fess 웹 애플리케이션

  • 크롤러 프로세스

  • OpenSearch

적절한 메모리 설정을 통해 성능 향상과 안정적인 동작을 실현할 수 있습니다.

Fess 웹 애플리케이션의 메모리 설정

설정이 필요한 경우

다음과 같은 경우 메모리 크기 조정을 고려하십시오.

  • fess.log 에 OutOfMemory 오류가 기록됨

  • 대량의 동시 접속을 처리해야 함

  • 관리 화면의 작업이 느리거나 타임아웃됨

기본 메모리 크기는 일반적인 사용에는 충분하지만, 부하가 높은 환경에서는 증량이 필요합니다.

환경 변수를 통한 설정

환경 변수 FESS_HEAP_SIZE 를 설정합니다.

export FESS_HEAP_SIZE=2g

단위:

  • m: 메가바이트

  • g: 기가바이트

RPM/DEB 패키지의 경우

RPM 패키지로 설치한 경우 /etc/sysconfig/fess 를 편집합니다.

FESS_HEAP_SIZE=2g

DEB 패키지의 경우 /etc/default/fess 를 편집합니다.

FESS_HEAP_SIZE=2g

경고

메모리 크기를 변경한 후에는 Fess 서비스를 재시작해야 합니다.

권장 메모리 크기

환경 권장 힙 크기 비고
개발/테스트 환경 512m〜1g 소규모 인덱스
소규모 운영 환경 1g〜2g 수만〜수십만 문서
중규모 운영 환경 2g〜4g 수십만〜수백만 문서
대규모 운영 환경 4g〜8g 수백만 이상의 문서

크롤러의 메모리 설정

설정이 필요한 경우

다음과 같은 경우 크롤러의 메모리 크기를 늘려야 합니다.

  • 병렬 크롤 수를 늘리는 경우

  • 큰 파일을 크롤링하는 경우

  • 크롤 실행 중 OutOfMemory 오류가 발생하는 경우

설정 방법

app/WEB-INF/classes/fess_config.properties 또는 /etc/fess/fess_config.properties 를 편집합니다.

jvm.crawler.options=-Xmx512m

예를 들어 1GB로 변경하는 경우:

jvm.crawler.options=-Xmx1g

참고

이 설정은 크롤러 프로세스 단위(스케줄러의 작업 단위)로 적용됩니다. 여러 크롤 작업을 동시에 실행하는 경우 각 작업에서 지정한 메모리가 사용됩니다.

권장 설정

  • 일반 웹 크롤링: 512m〜1g

  • 대량 병렬 크롤링: 1g〜2g

  • 큰 파일 크롤링: 2g〜4g

상세 JVM 옵션

크롤러의 상세 JVM 옵션은 jvm.crawler.options 에서 설정할 수 있습니다. 기본 설정에는 다음과 같은 최적화가 포함되어 있습니다.

주요 옵션:

옵션 설명
-Xms128m -Xmx512m 초기 힙 크기와 최대 힙 크기
-XX:MaxMetaspaceSize=128m Metaspace의 최대 크기
-XX:+UseG1GC G1 가비지 컬렉터 사용
-XX:MaxGCPauseMillis=60000 GC 중지 시간 목표값(60초)
-XX:-HeapDumpOnOutOfMemoryError OutOfMemory 시 힙 덤프 비활성화

OpenSearch의 메모리 설정

중요 고려 사항

OpenSearch에서는 다음 2가지를 고려하여 메모리를 설정해야 합니다.

  1. Java 힙 메모리: OpenSearch 프로세스에서 사용

  2. OS 파일 시스템 캐시: 검색 성능에 중요

경고

Java 힙 메모리를 너무 크게 하면 OS 파일 시스템 캐시에 사용할 수 있는 메모리가 감소하여 검색 성능이 저하됩니다.

설정 방법

Linux 환경

OpenSearch의 힙 메모리는 환경 변수 또는 OpenSearch 설정 파일에서 지정합니다.

환경 변수로 설정:

export OPENSEARCH_HEAP_SIZE=2g

또는 config/jvm.options 를 편집:

-Xms2g
-Xmx2g

참고

최소 힙 크기(-Xms)와 최대 힙 크기(-Xmx)는 동일한 값으로 설정하는 것을 권장합니다.

Windows 환경

config\jvm.options 파일을 편집합니다.

-Xms2g
-Xmx2g

권장 메모리 크기

인덱스 크기 권장 힙 크기 권장 총 메모리
〜10GB 2g 4GB 이상
10GB〜50GB 4g 8GB 이상
50GB〜100GB 8g 16GB 이상
100GB 이상 16g〜31g 32GB 이상

경고

OpenSearch의 힙 메모리는 32GB를 초과하지 않도록 설정하십시오. 32GB를 초과하면 Compressed OOP가 비활성화되어 메모리 효율성이 저하됩니다.

모범 사례

  1. 물리 메모리의 50%를 힙에 할당

    서버의 물리 메모리 약 50%를 OpenSearch의 힙에 할당합니다. 나머지는 OS와 파일 시스템 캐시에 사용됩니다.

  2. 최대 31GB까지

    힙 크기는 최대 31GB까지로 하고, 그 이상 필요한 경우 노드를 추가합니다.

  3. 운영 환경에서 확인

    OpenSearch의 공식 문서를 참조하여 환경에 맞는 최적 설정을 수행하십시오.

제안 및 썸네일 처리의 메모리 설정

제안 생성 프로세스

제안 생성 처리의 메모리 설정은 jvm.suggest.options 에서 설정합니다.

jvm.suggest.options=-Xmx256m

기본적으로 다음 설정이 사용됩니다:

  • 초기 힙: 128MB

  • 최대 힙: 256MB

  • Metaspace 최대: 128MB

썸네일 생성 프로세스

썸네일 생성 처리의 메모리 설정은 jvm.thumbnail.options 에서 설정합니다.

jvm.thumbnail.options=-Xmx256m

기본적으로 다음 설정이 사용됩니다:

  • 초기 힙: 128MB

  • 최대 힙: 256MB

  • Metaspace 최대: 128MB

참고

썸네일 생성에서 큰 이미지를 처리하는 경우 메모리를 늘려야 합니다.

메모리 모니터링 및 튜닝

메모리 사용 상황 확인

Fess의 메모리 사용 상황

관리 화면의 “시스템 정보”에서 확인할 수 있습니다.

또는 JVM 모니터링 도구를 사용:

jps -l  # Fess 프로세스 확인
jstat -gcutil <PID> 1000  # GC 통계를 1초마다 표시

OpenSearch의 메모리 사용 상황

curl -X GET "localhost:9201/_nodes/stats/jvm?pretty"
curl -X GET "localhost:9201/_cat/nodes?v&h=heap.percent,ram.percent"

메모리 부족 징후

다음과 같은 증상이 나타나면 메모리 부족일 가능성이 있습니다.

Fess 웹 애플리케이션:

  • 응답이 느림

  • OutOfMemoryError 가 로그에 기록됨

  • 프로세스가 예기치 않게 종료됨

크롤러:

  • 크롤이 중간에 중지됨

  • OutOfMemoryErrorfess_crawler.log 에 기록됨

  • 큰 파일의 크롤링에 실패함

OpenSearch:

  • 검색이 느림

  • 인덱스 생성이 느림

  • circuit_breaker_exception 오류가 발생함

튜닝 절차

  1. 현재 메모리 사용 상황 확인

    각 컴포넌트의 메모리 사용 상황을 모니터링합니다.

  2. 병목 현상 식별

    어떤 컴포넌트에서 메모리가 부족한지 식별합니다.

  3. 단계적으로 증가

    한 번에 크게 늘리지 말고 25-50%씩 늘려 효과를 확인합니다.

  4. 시스템 전체의 균형 고려

    각 컴포넌트의 총 메모리가 물리 메모리를 초과하지 않도록 합니다.

  5. 지속적인 모니터링

    메모리 사용 상황을 지속적으로 모니터링하고 필요에 따라 조정합니다.

메모리 누수 대책

메모리 누수가 의심되는 경우:

  1. 힙 덤프 획득

jmap -dump:format=b,file=heap.bin <PID>
  1. 힙 덤프 분석

    Eclipse Memory Analyzer (MAT) 등의 도구로 분석합니다.

  2. 문제 보고

    메모리 누수를 발견한 경우 GitHub Issues에 보고해 주십시오.

문제 해결

OutOfMemoryError 발생

Fess 웹 애플리케이션:

  1. FESS_HEAP_SIZE 를 늘립니다.

  2. 동시 접속 수를 제한합니다.

  3. 로그 레벨을 낮춰 로그 출력에 의한 메모리 사용을 줄입니다.

크롤러:

  1. jvm.crawler.options-Xmx 를 늘립니다.

  2. 병렬 크롤 수를 줄입니다.

  3. 큰 파일을 제외하도록 크롤 설정을 조정합니다.

OpenSearch:

  1. 힙 크기를 늘립니다(최대 31GB까지).

  2. 인덱스의 샤드 수를 검토합니다.

  3. 쿼리의 복잡성을 확인합니다.

GC로 인한 중지 시간이 긴 경우

  1. G1GC 설정을 조정합니다.

  2. 힙 크기를 적절히 설정합니다(너무 크거나 작아도 GC가 빈번함).

  3. 더 새로운 Java 버전으로 업데이트를 고려합니다.

메모리 설정 후에도 성능이 개선되지 않음

  1. CPU, 디스크 I/O, 네트워크 등 다른 리소스를 확인합니다.

  2. 인덱스 최적화를 수행합니다.

  3. 쿼리나 크롤 설정을 검토합니다.

참고 정보