메모리 설정
개요
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가지를 고려하여 메모리를 설정해야 합니다.
Java 힙 메모리: OpenSearch 프로세스에서 사용
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가 비활성화되어 메모리 효율성이 저하됩니다.
모범 사례
물리 메모리의 50%를 힙에 할당
서버의 물리 메모리 약 50%를 OpenSearch의 힙에 할당합니다. 나머지는 OS와 파일 시스템 캐시에 사용됩니다.
최대 31GB까지
힙 크기는 최대 31GB까지로 하고, 그 이상 필요한 경우 노드를 추가합니다.
운영 환경에서 확인
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가 로그에 기록됨프로세스가 예기치 않게 종료됨
크롤러:
크롤이 중간에 중지됨
OutOfMemoryError가fess_crawler.log에 기록됨큰 파일의 크롤링에 실패함
OpenSearch:
검색이 느림
인덱스 생성이 느림
circuit_breaker_exception오류가 발생함
튜닝 절차
현재 메모리 사용 상황 확인
각 컴포넌트의 메모리 사용 상황을 모니터링합니다.
병목 현상 식별
어떤 컴포넌트에서 메모리가 부족한지 식별합니다.
단계적으로 증가
한 번에 크게 늘리지 말고 25-50%씩 늘려 효과를 확인합니다.
시스템 전체의 균형 고려
각 컴포넌트의 총 메모리가 물리 메모리를 초과하지 않도록 합니다.
지속적인 모니터링
메모리 사용 상황을 지속적으로 모니터링하고 필요에 따라 조정합니다.
메모리 누수 대책
메모리 누수가 의심되는 경우:
힙 덤프 획득
jmap -dump:format=b,file=heap.bin <PID>
힙 덤프 분석
Eclipse Memory Analyzer (MAT) 등의 도구로 분석합니다.
문제 보고
메모리 누수를 발견한 경우 GitHub Issues에 보고해 주십시오.
문제 해결
OutOfMemoryError 발생
Fess 웹 애플리케이션:
FESS_HEAP_SIZE를 늘립니다.동시 접속 수를 제한합니다.
로그 레벨을 낮춰 로그 출력에 의한 메모리 사용을 줄입니다.
크롤러:
jvm.crawler.options의-Xmx를 늘립니다.병렬 크롤 수를 줄입니다.
큰 파일을 제외하도록 크롤 설정을 조정합니다.
OpenSearch:
힙 크기를 늘립니다(최대 31GB까지).
인덱스의 샤드 수를 검토합니다.
쿼리의 복잡성을 확인합니다.
GC로 인한 중지 시간이 긴 경우
G1GC 설정을 조정합니다.
힙 크기를 적절히 설정합니다(너무 크거나 작아도 GC가 빈번함).
더 새로운 Java 버전으로 업데이트를 고려합니다.
메모리 설정 후에도 성능이 개선되지 않음
CPU, 디스크 I/O, 네트워크 등 다른 리소스를 확인합니다.
인덱스 최적화를 수행합니다.
쿼리나 크롤 설정을 검토합니다.
참고 정보
포트 및 네트워크 설정 - 포트 및 네트워크 설정
크롤러 고급 설정 - 크롤러 고급 설정
로그 설정 - 로그 설정