4.2. 환경 변수를 사용하여 OpenShift용 JBoss EAP 구성

환경 변수 사용은 OpenShift 이미지용 JBoss EAP를 구성하는 데 권장되는 방법입니다. 애플리케이션 컨테이너 및 빌드 컨테이너에 대한 환경 변수를 지정하는 방법은 OpenShift 설명서를 참조하십시오.

예를 들어 OpenShift 애플리케이션을 생성할 때 환경 변수를 사용하여 JBoss EAP 인스턴스의 관리 사용자 이름과 암호를 설정할 수 있습니다.

oc new-app --template=eap74-basic-s2i \
 -p IMAGE_STREAM_NAMESPACE=eap-demo \
 -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \
 -p SOURCE_REPOSITORY_REF=7.4.x \
 -p CONTEXT_DIR=kitchensink \
 -e ADMIN_USERNAME=myspecialuser \
 -e ADMIN_PASSWORD=myspecialp@ssw0rd

OpenShift용 JBoss EAP 이미지에 사용 가능한 환경 변수는 참조 정보에 나열되어 있습니다.

4.2.1. JVM 메모리 구성

OpenShift EAP 이미지에는 현재 환경에 따라 기본 JVM 메모리 설정을 자동으로 계산하는 메커니즘이 있지만 환경 변수를 사용하여 JVM 메모리 설정을 구성할 수도 있습니다.

4.2.1.1. JVM 기본 메모리 설정

현재 컨테이너에 메모리 제한이 정의되어 있고 제한이 사용 가능한 총 메모리보다 낮은 경우 기본 JVM 메모리 설정이 자동으로 계산됩니다. 그러지 않으면 기본 JVM 메모리 설정이 이미지의 기본 서버로 사용되는 EAP 버전의 standalone.conf 파일에 정의된 기본값입니다.

컨테이너 메모리 제한은 /sys/fs/cgroup/memory/memory.limit_in_bytes 파일에서 검색됩니다. 사용 가능한 총 메모리는 /proc/meminfo 명령을 사용하여 검색합니다.

메모리 설정이 자동으로 계산되면 다음과 같은 공식이 사용됩니다.

  • 최대 힙 크기(-Xmx): 사용자 메모리의 50%
  • 초기 힙 크기(-Xms): 계산된 최대 힙 크기의 25퍼센트(25%)입니다.

예를 들어 정의된 메모리 제한은 1GB이고 이 제한은 /proc/meminfo 에서 보고한 총 사용 가능한 메모리보다 작으면 메모리 설정은 -Xms128m -Xmx512가 됩니다.

다음 환경 변수를 사용하여 자동으로 계산된 JVM 설정을 수정할 수 있습니다. 이러한 변수는 기본 메모리 크기를 자동으로 계산할 때만 사용됩니다(즉, 유효한 컨테이너 메모리 제한이 정의된 경우).

  • JAVA_MAX_MEM_RATIO
  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_INITIAL_MEM

다음 두 환경 변수 값을 0으로 설정하여 자동 메모리 계산을 비활성화할 수 있습니다.

  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_MEM_RATIO

4.2.1.2. JVM 가비지 컬렉션 설정

OpenShift의 EAP 이미지에는 가비지 컬렉션 및 가비지 컬렉션 로깅에 대한 설정이 포함되어 있습니다.

가비지 컬렉션 설정

-XX:+UseParallelOldGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError

Java 8에 대한 가비지 컬렉션 로깅 설정(모듈이 아닌 JVM)

-verbose:gc -Xloggc:/opt/eap/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading

Java 11에 대한 가비지 컬렉션 로깅 설정(Modular JVM)

-Xlog:gc*:file=/opt/eap/standalone/log/gc.log:time,uptimemillis:filecount=5,filesize=3M

4.2.1.3. 기본 설정의 리소스 제한

설정된 경우 이미지에 추가 기본 설정이 포함됩니다.

-XX:ParallelGCThreads={core-limit} -Djava.util.concurrent.ForkJoinPool.common.parallelism={core-limit} -XX:CICompilerCount=2

{core-limit} 값은 JAVA_CORE_LIMIT 환경 변수를 사용하거나 컨테이너에서 지정한 CPU 코어 제한을 사용하여 정의합니다.

CICompilerCount 값은 항상 2 로 고정됩니다.

4.2.1.4. JVM 환경 변수

이러한 환경 변수를 사용하여 EAP에서 OpenShift 이미지의 JVM을 구성합니다.

표 4.1. JVM 환경 변수

변수 이름예제기본값JVM 설정설명

JAVA_OPTS

-verbose:class

기본값 없음

multiple

java 명령에 전달할 JVM 옵션.

JAVA_OPTS_APPEND 를 사용하여 추가 JVM 설정을 구성합니다. JAVA_OPTS 를 사용하는 경우 구성 불가능한 일부 기본값은 서버 JVM 설정에 추가되지 않습니다. 이러한 설정을 명시적으로 추가해야 합니다.

JAVA_OPTS 를 사용하면 컨테이너 스크립트에서 기본적으로 추가된 특정 설정을 비활성화합니다. 비활성화된 설정은 다음과 같습니다.

  • -XX:MetaspaceSize=96M
  • -Djava.net.preferIPv4Stack=true
  • -Djboss.modules.system.pkgs=jdk.nashorn.api,com.sun.crypto.provider
  • -Djava.awt.headless=true

또한 자동 메모리 계산이 활성화되어 있지 않으면 초기 Java 메모리(-Xms) 및 최대 Java 메모리(-Xmx)가 정의되지 않습니다.

JAVA_OPTS 를 사용하여 추가 설정을 구성하는 경우 이러한 기본값을 추가합니다.

JAVA_OPTS_APPEND

-Dsome.property=value

기본값 없음

multiple

JAVA_OPTS 에서 생성된 옵션에 추가하기 위한 사용자 지정 Java 옵션.

JAVA_MAX_MEM_RATIO

50

50

-Xmx

JAVA_OPTS-Xmx 옵션이 지정되지 않은 경우 이 변수를 사용합니다. 이 변수의 값은 컨테이너의 제한 사항에 따라 기본 최대 힙 메모리 크기를 계산하는 데 사용됩니다. 메모리 제약 조건이 없는 컨테이너에서 이 변수를 사용하는 경우 변수가 적용되지 않습니다. 이 변수가 메모리 제약 조건이 있는 컨테이너에서 사용되는 경우 -Xmx 값은 컨테이너의 사용 가능한 메모리의 지정된 비율로 설정됩니다. 기본값인 50 은 사용 가능한 메모리의 50%가 상위 경계로 사용됨을 의미합니다. 최대 메모리 계산을 건너뛰려면 이 변수의 값을 0 으로 설정합니다. no -Xmx 옵션이 JAVA_OPTS 에 추가됩니다.

JAVA_INITIAL_MEM_RATIO

25

25

-Xms

JAVA_OPTS-Xms 옵션이 지정되지 않은 경우 이 변수를 사용합니다. 이 변수의 값은 최대 힙 메모리를 기반으로 기본 초기 힙 메모리 크기를 계산하는 데 사용됩니다. 메모리 제약 조건이 없는 컨테이너에서 이 변수를 사용하는 경우 변수가 적용되지 않습니다. 이 변수가 메모리 제약 조건이 있는 컨테이너에서 사용되는 경우 -Xms 값은 -X mx 메모리의 지정된 비율로 설정됩니다. 기본값인 25 는 최대 메모리의 25%가 초기 힙 크기로 사용됨을 의미합니다. 초기 메모리 계산을 건너뛰려면 이 변수의 값을 0 으로 설정합니다. no -Xms 옵션이 JAVA_OPTS 에 추가됩니다.

JAVA_MAX_INITIAL_MEM

4096

4096

-Xms

JAVA_OPTS-Xms 옵션이 지정되지 않은 경우 이 변수를 사용합니다. 이 변수의 값은 초기 메모리 힙의 최대 크기를 계산하는 데 사용됩니다. 이 값은 메가바이트(MB)로 표시됩니다. 메모리 제약 조건이 없는 컨테이너에서 이 변수를 사용하는 경우 변수가 적용되지 않습니다. 이 변수가 메모리 제약 조건이 있는 컨테이너에서 사용되는 경우 -Xms 값은 변수에 지정된 값으로 설정됩니다. 기본값인 4096은 최대 초기 힙이 4096MB보다 크지 않도록 지정합니다.

JAVA_DIAGNOSTICS

true

False(비활성화됨)

설정은 컨테이너에서 사용하는 JDK에 따라 다릅니다.

  • OpenJDK8: -XX:NativeMemoryœing=summary -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UnlockDiagnosticVMOptions
  • OpenJDK11: -Xlog:gc:utctime -XX:NativeMemoryTracking=summary

이벤트가 발생할 때 표준 출력에 진단 정보를 포함하도록 이 변수의 값을 true 로 설정합니다. JAVA_DIAGNOST¢가 이미 true 로 정의된 환경에서 이 변수를 true 로 정의한 경우 진단이 여전히 포함됩니다.

디버그

true

false

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

원격 디버깅을 활성화합니다.

DEBUG_PORT

8787

8787

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

디버깅에 사용되는 포트를 지정합니다.

JAVA_CORE_LIMIT

 

정의되지 않음

-XX:parallelGCThreads -Djava.util.concurrent.ForkJoinPool.common.parallelism -XX:CICompilerCount

코어 수에 대한 사용자 정의 제한입니다. 컨테이너에서 제한 제한 조건을 보고하면 JVM 설정 값은 컨테이너 코어 제한으로 제한됩니다. XXCICompilerCount 값은 항상 2 입니다. 기본적으로 이 변수는 정의되지 않습니다. 이 경우 컨테이너에 제한이 정의되지 않은 경우 JVM 설정이 설정되지 않습니다.

GC_MIN_HEAP_FREE_RATIO

20

10

-XX:MinHeapFreeRatio

확장을 방지하기 위해 가비지 컬렉션 후 사용 가능한 힙의 최소 백분율입니다.

GC_MAX_HEAP_FREE_RATIO

40

20

-XX:MaxHeapFreeRatio

가비지 컬렉션 후 사용 가능한 최대 힙 백분율로 축소되지 않도록 합니다.

GC_TIME_RATIO

4

4

-XX:GCTimeRatio

가비지 컬렉션 외부에서 사용된 시간의 비율을(예: 애플리케이션 실행에 사용된 시간)과 가비지 컬렉션에 사용된 시간 비율을 지정합니다.

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

90

90

-XX:AdaptiveSizePolicyWeight

현재 가비지 컬렉션 시간에 지정된 가중치와 이전 가비지 컬렉션 시간 비교.

GC_METASPACE_SIZE

20

96

-XX:MetaspaceSize

초기 메타 공간 크기.

GC_MAX_METASPACE_SIZE

100

256

-XX:MaxMetaspaceSize

최대 메타 공간 크기입니다.

GC_CONTAINER_OPTIONS

-XX:+UseG1GC

-XX:-UseParallelOldGC

-XX:-UseParallelOldGC

사용할 Java 가비지 컬렉션을 지정합니다. 변수 값은 필요한 가비지 컬렉션을 지정하는 JRE 명령줄 옵션이어야 합니다. 지정된 JRE 명령은 기본값을 재정의합니다.

다음 환경 변수는 더 이상 사용되지 않습니다.

  • JAVA_OPTIONS: JAVA_OPTS 를 사용합니다.
  • INITIAL_HEAP_PERCENT: JAVA_INITIAL_MEM_RATIO 를 사용합니다.
  • CONTAINER_HEAP_PERCENT: JAVA_MAX_MEM_RATIO 를 사용합니다.