Kubernetes/삽질

[k8s/Trino] Unrecognized VM option 'UseBiasedLocking' 현상

비번변경 2024. 1. 3. 13:29

현상

AWS EKS환경에서 Apache Superset을 통해 AWS S3 데이터를 쿼리 하기 위해 Trino, Hive Metastore를 설치해 사용 중인데, 어느 날부터 Trino Worker Pod 1개에 아래와 같은 에러 로그와 함께 동작하지 않았다.

원인을 파악하고 해결한 방법을 적어둔다.

 

 

원인

에러 로그에서 확인되는 VM 옵션 UseBiasedLocking은 멀티스레딩 성능 관련 옵션으로 Java 5에 추가되고 Java 15에서 deprecated 된 후, 삭제되었다.

즉, 새로운 trino-worker pod가 동작하면서 사용하는 Java 버전에서 UseBiasedLocking 옵션이 지원되지 않아 서비스가 동작하지 않았다. trino 버전에 따라 Java 버전을 고정해두지는 않은 모양이다.

 

 

해결 1

Trino 시작 시 JVM 옵션에서 UseBiasedLocking을 제거한다.

다만 이 글의 Trino는 helm chart로 설치되어 있어 chart templete을 수정하는 것은 관리 상 적절하지 않았다.

참고 : https://trino.io/docs/current/installation/deployment.html#jvm-config

 

 

해결 2

Trino 시작시 JVM 옵션에 IgnoreUnrecognizedVMOptions을 추가한다. IgnoreUnrecognizedVMOptions 옵션은 인식되지 않는 JVM 옵션을 무시하고 프로그램을 시작한다. 

추가 JVM 옵션은 helm values.yaml의 coordinator.additionalJVMConfig, worker.additionalJVMConfig을 통해 전달할 수 있다. 맞게 전달했는지는 모르겠지만 이 글에서는 아래와 같이 전달하여 재설치했다.

coordinator:
  jvm:
    maxHeapSize: "8G"
    gcMethod:
      type: "UseG1GC"
      g1:
        heapRegionSize: "32M"

  additionalJVMConfig:
    - -XX:+IgnoreUnrecognizedVMOptions

coordinator, worker 각각에 추가한 JVM 옵션은 각 노드의 configmap으로 전달된다.

 

 

해결 3

최신 Java 버전에서 제거된 JVM 옵션은 2023-12-08일 기준으로 trino chart 최신 버전인 0.14.0에서 제거되었다.

https://github.com/trinodb/charts/blob/main/charts/trino/templates/configmap-coordinator.yaml#L23

  jvm.config: |
    -server
    -agentpath:/usr/lib/trino/bin/libjvmkill.so
    -Xmx{{ .Values.coordinator.jvm.maxHeapSize }}
    -XX:+{{ .Values.coordinator.jvm.gcMethod.type }}
    -XX:G1HeapRegionSize={{ .Values.coordinator.jvm.gcMethod.g1.heapRegionSize }}
    -XX:+ExplicitGCInvokesConcurrent
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:+ExitOnOutOfMemoryError
    -XX:-OmitStackTraceInFastThrow
    -XX:ReservedCodeCacheSize=512M
    -XX:PerMethodRecompilationCutoff=10000
    -XX:PerBytecodeRecompilationCutoff=10000
    -Djdk.attach.allowAttachSelf=true
    -Djdk.nio.maxCachedBufferSize=2000000
    -XX:+UnlockDiagnosticVMOptions
    # Reduce starvation of threads by GClocker, recommend to set about the number of cpu cores (JDK-8192647)
    -XX:GCLockerRetryAllocationCount=32
  {{- range $configValue := .Values.coordinator.additionalJVMConfig }}
    {{ $configValue }}
  {{- end }}

즉, chart 버전을 업그레이드하는 방법을 고려할 수 있다.

 

 

 

참고 문서

Unrecognized VM option 'UseBiasedLocking' Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit

https://www.ibm.com/docs/en/ztpf/2022?topic=options-xx-ignoreunrecognizedvmoptions-option