Red Hat JBoss Enterprise Application Platform의 성능 튜닝


Red Hat JBoss Enterprise Application Platform 8.0

Red Hat JBoss Enterprise Application Platform 성능 평가 및 성능 향상을 위한 업데이트 구성 방법.

Red Hat Customer Content Services

초록

이 문서는 Red Hat JBoss Enterprise Application Platform의 성능 튜닝 가이드입니다.

JBoss EAP 문서에 대한 피드백 제공

오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.

프로세스

  1. 티켓을 생성하려면 다음 링크를 클릭하십시오.
  2. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  3. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  4. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 사항은 향후 릴리스에 걸쳐 점진적으로 구현될 예정입니다. 언어를 보다 포괄적으로 만드는 방법에 대한 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. 성능 튜닝 소개

JBoss EAP 설치는 기본적으로 최적화되어 있습니다. 그러나 사용자 환경, 애플리케이션 및 JBoss EAP 하위 시스템 사용에 대한 구성이 성능에 영향을 미칠 수 있으므로 추가 구성이 필요할 수 있습니다.

이 가이드에서는 일반적인 JBoss EAP 사용 사례에 대한 최적화 권장 사항과 성능 문제 모니터링 및 진단 지침을 제공합니다.

중요

프로덕션에 배포하기 전에 준비 또는 테스트 환경에서 예상되는 조건에서 모든 성능 구성 변경 사항을 테스트하고 확인해야 합니다.

1.1. 이 문서에서 EAP_HOME 사용 정보

이 문서에서는 변수 EAP_HOME 을 사용하여 JBoss EAP 설치 경로를 나타냅니다. 이 변수를 JBoss EAP 설치의 실제 경로로 바꿉니다.

  • JBoss EAP 압축 파일을 설치한 경우 설치 디렉터리는 압축된 아카이브를 추출한 jboss-eap-8.0 디렉터리입니다.
  • 설치 프로그램을 사용하여 JBoss EAP를 설치한 경우 EAP_HOME 의 기본 경로는 ${user.home}/EAP-8.0.0 입니다.

    • Red Hat Enterprise Linux 및 Solaris의 경우: /home/USER_NAME/EAP-8.0.0/
    • Microsoft Windows의 경우: C:\Users\USER_NAME\EAP-8.0.0\
  • JBoss Tools 설치 프로그램을 사용하여 JBoss EAP 서버를 설치하고 구성하는 경우 EAP_HOME 의 기본 경로는 ${user.home}/devstudio/runtimes/jboss-eap:입니다.

    • Red Hat Enterprise Linux의 경우: /home/USER_NAME/devstudio/runtimes/jboss-eap/
    • Microsoft Windows의 경우: C:\Users\USER_NAME\devstudio\runtimes\jboss-eap 또는 C:\Documents 및 Settings\USER_NAME\devstudio\runtimes\jboss-eap\
참고

대상 런타임8.0 또는 JBoss Tools에서 최신 런타임 버전으로 설정하는 경우 프로젝트는 자카르타 EE 8 사양과 호환됩니다.

참고

EAP_HOME 은 환경 변수가 아닙니다. JBOSS_HOME 은 스크립트에서 사용되는 환경 변수입니다.

2장. 성능 모니터링

시스템에서 실행 중인 JVM을 검사할 수 있는 툴을 사용하여 JBoss EAP 성능을 모니터링할 수 있습니다. Red Hat은 JBoss EAP에 사전 구성된 래퍼 스크립트 또는 JMC(Java Mission Control)를 포함하는 JConsole을 사용하는 것이 좋습니다. 두 툴 모두 메모리 사용량, 스레드 사용률, 로드된 클래스 및 기타 JVM 메트릭을 포함하여 JVM 프로세스에 대한 기본 모니터링을 제공합니다.

JBoss EAP가 실행되는 것과 동일한 시스템에서 이러한 툴 중 하나를 로컬로 실행하는 경우 구성이 필요하지 않습니다. 그러나 원격 시스템에서 실행 중인 JBoss EAP를 모니터링하기 위해 이러한 툴 중 하나를 실행 중인 경우 JBoss EAP에서 원격 Cryostat 연결을 수락하려면 일부 구성이 필요합니다.

2.1. 원격 모니터링 연결을 위한 JBoss EAP 구성

2.1.1. 독립 실행형 서버에 대한 원격 모니터링 연결 구성

프로세스

  1. 관리 사용자를 생성했는지 확인합니다. JBoss EAP 서버를 모니터링할 별도의 관리 사용자를 생성할 수 있습니다.
  2. JBoss EAP를 시작할 때 원격으로 서버를 모니터링하는 데 사용할 IP 주소에 관리 인터페이스를 바인딩합니다.

    $ EAP_HOME/bin/standalone.sh -bmanagement=IP_ADDRESS
    Copy to Clipboard Toggle word wrap
    주의

    이렇게 하면 관리 콘솔 및 관리 CLI를 포함한 모든 JBoss EAP 관리 인터페이스가 지정된 네트워크에 노출됩니다. 관리 인터페이스만 사설 네트워크에 바인딩해야 합니다.

  3. JVM 모니터링 툴에서 관리 사용자 이름 및 암호와 함께 다음 URI를 사용하여 JBoss EAP 서버에 연결합니다. 아래 URI에서는 기본 관리 포트(9990)를 사용합니다.

    service:jmx:remote+http://IP_ADDRESS:9990
    Copy to Clipboard Toggle word wrap

2.1.2. 관리형 도메인 호스트에 대한 JBoss EAP 원격 모니터링 연결 구성

관리형 도메인 호스트에서 관리 인터페이스를 바인딩하는 이전 절차를 사용하면 해당 호스트에서 실행되는 개별 JBoss EAP 서버가 아닌 원격 모니터링을 위한 호스트 컨트롤러 JVM만 노출됩니다.

관리형 도메인 호스트에서 개별 서버를 원격으로 모니터링하도록 JBoss EAP를 구성하려면 다음 절차를 따르십시오.

프로세스

  1. 원격 모니터링을 위해 JBoss EAP 서버에 연결하는 데 사용할 ApplicationRealm 에 새 사용자를 만듭니다.
  2. Elytron을 사용하도록 remoting 하위 시스템을 구성하려면 다음 명령을 실행합니다.

    /profile=full/subsystem=jmx/remoting-connector=jmx:add(use-management-endpoint=false)
    /socket-binding-group=full-sockets/socket-binding=remoting:add(port=4447)
    /profile=full/subsystem=remoting/connector=remoting-connector:add(socket-binding=remoting,sasl-authentication-factory=application-sasl-authentication)
    Copy to Clipboard Toggle word wrap
  3. JBoss EAP 관리형 도메인 호스트를 시작할 때 다음 인터페이스 중 하나 또는 둘 다를 모니터링에 사용할 IP 주소에 바인딩합니다.

    • 관리형 도메인 호스트에서 실행 중인 개별 JBoss EAP 서버 JVM에 연결하려면 공용 인터페이스를 바인딩합니다.

      $ EAP_HOME/bin/domain.sh -b=IP_ADDRESS
      Copy to Clipboard Toggle word wrap
    • JBoss EAP 호스트 컨트롤러 JVM에 연결하려면 관리 인터페이스도 바인딩합니다.

      $ EAP_HOME/bin/domain.sh -bmanagement=IP_ADDRESS
      Copy to Clipboard Toggle word wrap
      주의

      이렇게 하면 관리 콘솔 및 관리 CLI를 포함한 모든 JBoss EAP 관리 인터페이스가 지정된 네트워크에 노출됩니다. 관리 인터페이스만 사설 네트워크에 바인딩해야 합니다.

  4. JVM 모니터링 툴에서 다음 세부 정보를 사용합니다.

    • 관리형 도메인 호스트에서 실행 중인 개별 JBoss EAP 서버 JVM에 연결하려면 이전에 생성된 ApplicationRealm 사용자 이름 및 암호와 함께 다음 URI를 사용합니다.

      service:jmx:remote+http://IP_ADDRESS:4447
      Copy to Clipboard Toggle word wrap

      단일 호스트의 다른 JBoss EAP 서버에 연결하려면 해당 서버의 포트 오프셋 값을 위의 포트 번호에 추가합니다.

    • JBoss EAP 호스트 컨트롤러 JVM에 연결하려면 관리 사용자 이름 및 암호로 다음 URI를 사용합니다.

      service:jmx:remote+http://IP_ADDRESS:9990
      Copy to Clipboard Toggle word wrap

2.2. JConsole

사전 구성된 JConsole 래퍼 스크립트는 JBoss EAP와 함께 제공됩니다. 이 래퍼 스크립트를 사용하면 모든 필수 라이브러리가 클래스 경로에 추가되고 JConsole에서 JBoss EAP 관리 CLI에 액세스할 수도 있습니다.

2.2.1. JConsole을 사용하여 로컬 JBoss EAP JVM에 연결

JConsole과 동일한 시스템에서 실행 중인 JBoss EAP JVM에 연결하려면 다음을 수행합니다.

프로세스

  1. EAP_HOME/bin 에서 jconsole 스크립트를 실행합니다.
  2. 로컬 프로세스에서 모니터링할 JBoss EAP JVM 프로세스를 선택합니다.

    • 독립 실행형 JBoss EAP 서버의 경우 JBoss EAP JVM 프로세스가 한 개 있습니다.

      그림 2.1. JConsole Local Standalone JBoss EAP Server JVM

      JConsole 로컬 독립 실행형 8
    • JBoss EAP 관리형 도메인 호스트에는 연결할 수 있는 여러 JVM 프로세스, 호스트 컨트롤러 JVM 프로세스, 프로세스 컨트롤러 JVM 프로세스, 호스트의 각 JBoss EAP 서버에 대한 JVM 프로세스가 있습니다. JVM 인수를 확인하여 연결된 JVM을 확인할 수 있습니다.

      그림 2.2. JConsole 로컬 관리형 도메인 JBoss EAP JVM

      JConsole 로컬 도메인 Cryostat 8
  3. 연결을 클릭합니다.

2.2.2. JConsole을 사용하여 원격 JBoss EAP JVM에 연결

JConsole을 사용하여 jconsole 스크립트를 사용하여 원격 JBoss EAP JVM에 연결할 수 있습니다.

사전 요구 사항

  • 원격 모니터링 연결을 위해 JBoss EAP를 구성합니다.
  • JBoss EAP의 ZIP 설치를 다운로드하여 로컬 시스템에 추출합니다.

프로세스

  1. EAP_HOME/bin 에서 jconsole 스크립트를 실행합니다.
  2. Remote Process 에서 모니터링할 원격 JBoss EAP JVM 프로세스의 URI를 삽입합니다.

    그림 2.3. JConsole Remote JBoss EAP JVM

    JConsole remote Cryostat 8
  3. 모니터링 연결에 사용자 이름 및 암호를 제공해야 합니다.
  4. 연결을 클릭합니다.

2.3. Java Mission Control

개발자는 JMC(Java Mission Control)를 사용하여 성능 문제를 식별할 수 있습니다. JMC는 다음 구성 요소로 구성된 프로파일링 및 진단 도구입니다.

  • Java Virtual Machine(JVM) 브라우저로 실행 중인 Java 애플리케이션 및 관련 JVM을 확인합니다.
  • JVM을 모니터링하기 위한 JVM (Java Management) 콘솔.
  • Java Flight Recorder(JFR) 를 사용하여 실행 중인 Java 애플리케이션에서 진단 데이터를 수집합니다.
  • 힙 덤프 분석을 위한 플러그인 입니다.

3장. 성능 문제 진단

3.1. 가비지 컬렉션 로깅 활성화

가비지 컬렉션 로그를 검사하면 Java 성능 문제, 특히 메모리 사용과 관련된 문제를 해결할 때 유용할 수 있습니다.

로그 파일을 작성하기 위한 추가 디스크 I/O 활동 이외의 경우 가비지 컬렉션 로깅을 활성화해도 서버 성능에 큰 영향을 미치지 않습니다.

OpenJDK 또는 Oracle JDK에서 실행되는 독립 실행형 JBoss EAP 서버에 대해 기본적으로 가비지 컬렉션 로깅이 이미 활성화되어 있습니다. JBoss EAP 관리형 도메인의 경우 호스트 컨트롤러, 프로세스 컨트롤러 또는 개별 JBoss EAP 서버에 대해 가비지 컬렉션 로깅을 활성화할 수 있습니다.

  1. JDK에 대한 가비지 컬렉션 로깅을 활성화하는 올바른 JVM 옵션을 가져옵니다. 아래 옵션의 경로를 로그 생성 위치로 바꿉니다.

    참고
    • OpenJDK 11 또는 Oracle JDK 11의 경우:

      -verbose:gc -Xloggc:<path_to_directory>/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading
      Copy to Clipboard Toggle word wrap
    • OpenJDK 버전 9 이상, Oracle JDK 또는 JEP 271을 지원하는 JDK의 경우:

      -Xlog:gc*:file=<path_to_directory>/gc.log:time,uptimemillis:filecount=5,filesize=3M
      Copy to Clipboard Toggle word wrap

3.2. Java 힙 덤프

Java 힙 덤프는 특정 시점에 생성된 JVM 힙의 스냅샷입니다. 힙 덤프 생성 및 분석은 Java 애플리케이션과 관련된 문제를 진단하고 해결하는 데 유용할 수 있습니다.

사용 중인 JDK에 따라 JBoss EAP 프로세스에 대한 Java 힙 덤프를 생성하고 분석하는 다양한 방법이 있습니다. 이 섹션에서는 Oracle JDK 및 OpenJDK의 일반적인 방법에 대해 설명합니다.

3.2.1. OpenJDK 및 Oracle JDK를 사용하여 힙 덤프 생성

3.2.1.1. 온디맨드 힙 덤프 생성

jcmd 명령을 사용하여 OpenJDK 또는 Oracle JDK에서 실행되는 JBoss EAP에 대한 온디맨드 힙 덤프를 생성할 수 있습니다.

프로세스

  1. 힙 덤프를 생성할 JVM의 프로세스 ID를 결정합니다.
  2. 다음 명령을 사용하여 힙 덤프를 생성합니다.

    $ jcmd JAVA_PID GC.heap_dump -all=true FILENAME.hprof
    Copy to Clipboard Toggle word wrap

    이렇게 하면 HPROF 형식으로 힙 덤프 파일이 생성됩니다(일반적으로 EAP_HOME 또는 EAP_HOME/bin ). 또는 다른 디렉터리에 대한 파일 경로를 지정할 수 있습니다.

3.2.1.2. OutOfMemoryError에서 자동으로 힙 덤프 생성

OutOfMemoryError 예외가 throw되면 -XX:+HeapDumpOnOutOfMemoryError JVM 옵션을 사용하여 힙 덤프를 자동으로 생성할 수 있습니다.

이렇게 하면 HPROF 형식으로 힙 덤프 파일이 생성됩니다(일반적으로 EAP_HOME 또는 EAP_HOME/bin ). 또는 -XX:HeapDumpPath=/path/를 사용하여 힙 덤프에 대한 사용자 정의 경로를 설정할 수 있습니다. -XX:HeapDumpPath (예: -XX:HeapDumpPath =/path/filename.hprof )를 사용하여 파일 이름을 지정하면 힙 덤프가 서로 덮어씁니다.

3.2.2. 힙 덤프 분석

3.2.2.1. 힙 덤프 분석 툴

힙 덤프 파일을 분석하고 문제를 식별하는 데 도움이 되는 많은 툴이 있습니다. Red Hat 지원은 HPROF 또는 CryostatD 형식으로 포맷된 힙 덤프를 분석할 수 있는 MAT(Eclipse Memory Analyzer 툴) 를 사용하는 것이 좋습니다.

3.2.2.2. 힙 덤프 분석 팁

경우에 따라 힙 성능 문제의 원인은 명확하지만 애플리케이션의 코드 및 OutOfMemoryError 와 같은 문제를 유발하는 특정 상황을 파악해야 할 수 있습니다. 이렇게 하면 문제가 메모리 누수인지 또는 힙이 충분히 크지 않은지 여부를 식별하는 데 도움이 될 수 있습니다.

메모리 사용 문제를 식별하기 위한 몇 가지 제안 사항은 다음과 같습니다.

  • 단일 개체가 너무 많은 메모리를 소비하는 것으로 발견되지 않으면 클래스별로 그룹화하여 많은 작은 개체가 많은 메모리를 소비하는지 확인하십시오.
  • 메모리 사용량이 스레드인지 확인합니다. 이에 대한 좋은 지표는 OutOfMemoryError-triggered 힙 덤프가 지정된 Xmx 최대 힙 크기보다 훨씬 작은 경우입니다.
  • 메모리 누수를 더 감지할 수 있도록 만드는 기술은 일반 최대 힙 크기를 일시적으로 두 배로 늘리는 것입니다. OutOfMemoryError 가 발생하면 메모리 누수와 관련된 오브젝트의 크기가 힙의 절반 크기입니다.

메모리 문제의 소스를 식별하면 가비지 컬렉션 루트의 경로를 보고 개체를 활성 상태로 유지하는 항목을 확인할 수 있습니다.

3.3. Java Flight Recorder

3.3.1. Java Flight Recorder 정보

Oracle JDK Mission Control 사용자 가이드에서는 JFR(Java Flight Recorder)을 "프로필링 및 이벤트 컬렉션 프레임워크"로 설명합니다. 개발자는 JMC( JDK Mission Control)와 함께 JFR을 사용하여 JVM(Java Virtual Machine) 및 기타 Java 애플리케이션에 대한 데이터를 수집할 수 있습니다. 개발자는 이 데이터를 사용하여 성능 문제를 식별하고 해결할 수 있습니다.

JFR은 낮은 수준의 오버헤드(리소스 사용량)가 필요하므로 신중하게 설계되었습니다. 즉, JFR 프로파일링이 최소한의 영향을 미치는 특정 프로덕션 환경에서 지속적으로 실행될 수 있습니다. 개발자는 JFR 및 JMC를 사용하여 사고 후 런타임 정보를 신속하게 분석할 수 있습니다.

참고

JFR은 Java OpenJDK 8u262 이상에서 Java 진단 명령 도구의 일부로 사용할 수 있습니다.

3.3.2. Java Flight Recorder 프로파일링 구성

개발자는 프로파일링 구성을 수정하여 JFR(Java Flight Recorder) 인스턴스를 사용자 지정할 수 있습니다. JFR에서는 다음 두 가지 프로파일링 구성을 사용할 수 있습니다.

  • Default: 정보의 스파스 샘플링을 제공합니다. 낮은 프로파일링 세부 정보
  • profile: 정보의 보다 포괄적인 샘플링을 제공합니다; 중간 프로파일링 세부 정보

개발자는 두 구성 파일을 수정하여 추가 이벤트 메트릭 샘플링을 활성화할 수 있습니다.

3.3.3. Java Flight Recorder 프로파일 캡처 사용

개발자는 JFR(Java Flight Recorder)을 사용하여 베어 메탈에 JBoss EAP 설치를 프로파일링하거나 Red Hat OpenShift Container Platform을 사용할 수 있습니다.

OpenShift와 함께 JFR 사용에 대한 자세한 내용은 Introduction to Cryostat: JDK Flight Recorder for containers 를 참조하십시오.

3.3.3.1. 베어 메탈에서 Java Flight Recorder 프로파일링 활성화

개발자는 명령줄 또는 JMC(Java Mission Control) 데스크탑 애플리케이션이 있는 JMX(Java Flight Recorder) 프로필을 시작할 수 있습니다.

구성 플래그를 사용하여 JVM(Java Virtual Machine)에서 JBoss EAP로 JVM(Java Flight Recorder) 프로파일링을 구성할 수 있습니다.

JVM 구성 예

-XX:StartFlightRecording=delay=15s,duration=60s,name=jboss-eap-profile, filename=C:\TEMP\jboss-eap-profile.jfr,settings=default
Copy to Clipboard Toggle word wrap

StartFlightRecording=delay 구성 플래그를 사용하면 프로파일링 세션을 시작하기 전에 JVM이 부팅된 후 JFR 대기 시간을 설정할 수 있습니다. 이전 예에서 StartFlightRecording=delay 가 15초로 설정되어 있으므로 15초 후에 프로파일링이 시작됩니다.

duration 구성 플래그를 사용하면 각 프로파일링 세션의 시간을 설정할 수 있습니다. 이전 예에서 duration 은 60초로 설정됩니다.

name 구성 플래그를 사용하면 메모리 프로필 이름에 를 설정할 수 있습니다. 이 예에서 in memory profile name은 jboss-eap-profile 로 설정됩니다.

filename 구성 플래그를 사용하면 파일을 저장할 파일 이름과 경로를 설정할 수 있습니다. 이 예에서 파일 이름은 C:\TEMP\jboss-eap-profile.jfr 로 설정됩니다.

설정 구성 플래그를 사용하면 프로파일링 구성을 선택할 수 있습니다. 이 예에서는 설정이 기본값 으로 설정됩니다. 프로파일링 구성의 파일 확장자는 제외됩니다.

프로파일링 세션이 완료되면 파일 이름 옵션에 정의된 파일 경로에 파일이 생성됩니다.

JFR(Java Flight Recorder) JFR.start 명령을 사용하여 Java 명령 도구인 jcmd 를 사용하여 프로파일링을 위해 실행 중인 JBoss EAP Java Virtual Machine(JVM)을 구성할 수 있습니다.

프로세스

  • 다음 명령 중 하나를 사용합니다.

    • Linux 운영 체제의 경우:

      $ jcmd <PID> JFR.start duration=TIME filename=path/to/YOUR_PROFILE_NAME.jfr
      Copy to Clipboard Toggle word wrap

      예를 들면 다음과 같습니다.

      Linux의 JFR.start 명령 예

      $ jcmd <PID> JFR.start duration=60s filename=/tmp/jboss-eap-profile.jfr
      Copy to Clipboard Toggle word wrap

      JFR 프로파일링 세션이 시작되면 다음 확인 메시지가 표시됩니다.

      $ jcmd <PID> JFR.start duration=60s filename=/tmp/jboss-eap-profile.jfr
      <PID>:
      Started recording 1. The result will be written to:
      
      /tmp/jboss-eap-profile.jfr
      Copy to Clipboard Toggle word wrap
    • Windows 운영 체제의 경우:

      > jcmd.exe <PID> JFR.start duration=TIME filename=path/to/YOUR_PROFILE_NAME.jfr
      Copy to Clipboard Toggle word wrap

      예를 들면 다음과 같습니다.

      Windows용 JFR.start 명령 예

      > jcmd.exe <PID> JFR.start duration=60s filename=C:\TEMP\jboss-eap-profile.jfr
      Copy to Clipboard Toggle word wrap

      JFR 프로파일링 세션이 시작되면 다음 확인 메시지가 표시됩니다.

      > jcmd.exe <PID> JFR.start duration=60s filename=C:\TEMP\jboss-eap-profile.jfr
      <PID>:
      Started recording 1. The result will be written to:
      
      C:\TEMP\jboss-eap-profile.jfr
      Copy to Clipboard Toggle word wrap

duration 옵션을 사용하면 각 프로파일링 세션의 시간 길이를 설정할 수 있습니다. 위 예제 명령에서 duration 은 60초로 설정됩니다.

filename 옵션을 사용하면 파일을 저장할 파일 이름과 경로를 설정할 수 있습니다. 위의 예제 명령에서 filename 은 Linux 예제의 /tmp/jboss-eap-profile.jfr 및 Windows 예의 C:\TEMP\jboss-eap-profile.jfr 으로 설정됩니다.

3.3.3.4. Java Mission Control을 사용하여 로컬 Java 가상 머신 연결

JMC(Java Mission Control)를 사용하여 JMC 인스턴스와 동일한 서버에서 실행되는 로컬 JVM(Java Virtual Machine)을 연결할 수 있습니다.

사전 요구 사항

  • JBoss EAP 라이브러리를 사용한 Java Mission Control이 구성되어 있습니다. 자세한 내용은 Java Mission Control을 EAP와 원격으로 연결하는 방법을 참조하십시오.
  • JBoss EAP는 원격 모니터링 연결을 위해 구성되며 사용자는 모니터링을 위해 ApplicationRealm 에 생성됩니다.

프로세스

  1. Java Mission Control을 엽니다.
  2. JVM 브라우저 창에서 프로파일링할 JVM을 선택합니다.
  3. JVM의 드롭다운 메뉴를 확장하여 Flight Recorder 항목을 표시합니다.

    1. Flight Recorder 를 마우스 오른쪽 버튼으로 클릭하여 하위 메뉴를 열고 Start Flight Recording…​ 을 선택합니다.

      그림 3.1. JMC의 JVM 브라우저

      로컬 jvm jmc img 연결
  4. Start Flight Recording 창에서 프로파일링 옵션을 구성합니다.

    그림 3.2. JVM 프로파일링 설정

    jvm 설정 프로파일
  5. 자세한 낮은 수준 설정을 보려면 다음을 클릭합니다.

    그림 3.3. JVM 프로파일링 고급 설정

    jvm 고급 설정 프로파일
  6. 완료 를 클릭하여 프로파일링을 시작합니다.
3.3.3.5. Java Mission Control을 사용하여 원격 Java 가상 머신 연결

JMC(Java Mission Control)를 사용하여 원격 JVM(Java Virtual Machine) 프로필에 연결할 수 있습니다.

사전 요구 사항

  • JBoss EAP 라이브러리를 사용하여 Java Mission Control 구성. 자세한 내용은 Java Mission Control을 EAP와 원격으로 연결하는 방법을 참조하십시오.
  • 모니터링을 위해 ApplicationRealm 에 생성된 사용자를 사용하여 원격 모니터링 연결을 위해 JBoss EAP를 구성합니다.

프로세스

  1. Java Mission Control을 엽니다.
  2. 파일 메뉴에서 연결을 선택합니다.
  3. 연결 창에서 새 연결 만들기 를 선택한 다음 다음을 클릭합니다.

    그림 3.4. JMC의 연결 창

    원격 jvm jmc 연결
  4. JVM 연결 창에서 프로파일링할 원격 JBoss EAP JVM에 대한 세부 정보를 완료합니다.

    그림 3.5. JMC의 JVM 연결 세부 정보

    원격 jvm jmc con props 연결
    1. 호스트 필드에서 호스트 이름 또는 IP 주소를 추가합니다.
    2. 포트 필드에 포트 번호를 추가합니다.
    3. 사용자 필드에서 ApplicationRealm 에서 생성한 사용자를 추가합니다.
    4. 암호 필드에 ApplicationRealm 에 생성된 암호를 추가합니다.
    5. 선택 사항 설정 파일에 인증 정보를 저장하려면 설정 파일에 인증 정보 저장 옆에 있는 확인란을 클릭합니다.
  5. Custom Cryostat Service URL 을 클릭하여 기본 설정을 재정의합니다.

    그림 3.6. JVM 연결을 위한 Cryostat 서비스 URL

    원격 jvm jmc con jmx url 연결
  6. JBoss remoting 프로토콜을 정의하기 위해 Cryostat 서비스 URL을 변경합니다.

    service:jmx:remote+http://<host>:9990
    Copy to Clipboard Toggle word wrap
  7. 연결 테스트를 클릭하여 설정을 확인합니다.
  8. 설정을 저장하려면 마침을 클릭합니다.Click Finish to save your settings.
  9. Cryo statRMI Preferences not set warning 메시지가 표시됩니다.

    그림 3.7. CryostatRMI 기본 설정 경고 메시지

    원격 jvm jmc 보안 경고 연결
    1. OK (확인)를 클릭하여 연결 시도를 수락합니다.
  10. JVM 브라우저 창에서 프로파일링할 JVM을 선택합니다.

    1. JVM의 드롭다운 메뉴를 확장하여 Flight Recorder 항목을 표시합니다.
    2. Flight Recorder 를 마우스 오른쪽 버튼으로 클릭하여 하위 메뉴를 연 다음 Start Flight Recording…​ 을 선택합니다.

      그림 3.8. JMC 프로필 메뉴를 사용하여 원격 JVM 연결

      원격 jvm jmc 프로필 메뉴 연결
  11. Start Flight Recording 창에서 프로파일링 옵션을 구성합니다.

    그림 3.9. JVM 프로파일링 설정

    jvm 설정 프로파일
  12. 자세한 낮은 수준 설정을 보려면 다음을 클릭합니다.

    그림 3.10. JVM 프로파일링 고급 설정

    jvm 고급 설정 프로파일
  13. 완료 를 클릭하여 프로파일링을 시작합니다.

3.4. Java 스레드의 CPU 사용률 확인

참고

Red Hat Enterprise Linux 또는 Solaris에서 JBoss EAP를 사용하는 고객의 경우 Red Hat Customer Portal의 JVMPeg 랩 툴 은 Java 스레드 정보를 수집하고 분석하여 높은 CPU 사용률을 식별하는 데 도움이 됩니다. 다음 절차 를 사용하는 대신 JVMPeg 랩 툴 사용 지침을 따릅니다.

OpenJDK 및 Oracle JDK 환경의 경우 jstack 유틸리티를 사용하여 Java 스레드 진단 정보를 사용할 수 있습니다.

  1. CPU의 높은 백분율을 사용하는 Java 프로세스의 프로세스 ID를 식별합니다.

    고가용성 프로세스에서 스레드당 CPU 데이터를 가져오는 것도 유용할 수 있습니다. 이 작업은 Red Hat Enterprise Linux 시스템에서 top -H 명령을 사용하여 수행할 수 있습니다.

  2. jstack 유틸리티를 사용하여 Java 프로세스의 스택 덤프를 만듭니다. 예를 들어 Linux 및 Solaris에서 다음을 수행합니다.

    jstack -l JAVA_PROCESS_ID > high-cpu-tdump.out
    Copy to Clipboard Toggle word wrap

    일정 기간 동안 변경 사항이나 추세를 보려면 간격으로 여러 덤프를 생성해야 할 수 있습니다.

  3. 스택 덤프를 분석합니다. TDA( Thread Dump Analyzer) 와 같은 도구를 사용할 수 있습니다.

관리 CLI 속성으로 생성된 런타임 통계를 확인하여 관리 실행자 서비스 및 관리되는 실행 관리자 서비스의 성능을 모니터링할 수 있습니다. 독립 실행형 서버 또는 호스트에 매핑된 개별 서버의 런타임 통계를 볼 수 있습니다.

중요

domain.xml 구성에는 런타임 통계 관리 CLI 속성에 대한 리소스가 포함되어 있지 않으므로 관리 CLI 속성을 사용하여 관리형 도메인의 런타임 통계를 볼 수 없습니다.

Expand
표 3.1. 관리 실행자 서비스 및 관리 스케줄링된 executor 서비스의 성능을 모니터링하기 위한 관리 CLI 속성을 표시합니다.
속성설명

active-thread-count

현재 작업 실행 중인 대략적인 스레드 수입니다.

completed-task-count

실행을 완료한 대략적인 총 작업 수입니다.

hung-thread-count

중단된 executor 스레드 수입니다.

max-thread-count

가장 많은 executor 스레드 수입니다.

current-queue-size

executor 작업 대기열의 현재 크기입니다.

task-count

실행을 위해 제출된 대략적인 총 작업 수입니다.

thread-count

현재 실행 중인 스레드 수입니다.

독립 실행형 서버에서 실행 중인 관리 executor 서비스의 런타임 통계를 보는 예제입니다.

[standalone@localhost:9990 /] /subsystem=ee/managed-executor-service=default:read-resource(include-runtime=true,recursive=true)
Copy to Clipboard Toggle word wrap

독립 실행형 서버에서 실행되는 관리형 스케줄링 executor 서비스의 런타임 통계의 예.

[standalone@localhost:9990 /] /subsystem=ee/managed-scheduled-executor-service=default:read-resource(include-runtime=true,recursive=true)
Copy to Clipboard Toggle word wrap

호스트에 매핑된 서버에서 실행 중인 관리 executor 서비스의 런타임 통계를 보는 예제입니다.

[domain@localhost:9990 /] /host=<host_name>/server=<server_name>/subsystem=ee/managed-executor-service=default:read-resource(include-runtime=true,recursive=true)
Copy to Clipboard Toggle word wrap

호스트에 매핑된 서버에서 실행되는 관리형 스케줄링 executor 서비스의 런타임 통계를 예로 들 수 있습니다.

[domain@localhost:9990 /] /host=<host_name>/server=<server_name>/subsystem=ee/managed-scheduled-executor-service=default:read-resource(include-runtime=true,recursive=true)
Copy to Clipboard Toggle word wrap

4장. JVM 튜닝

애플리케이션 및 JBoss EAP 환경에 대한 최적의 JVM 옵션을 구성하는 것이 성능을 조정하는 가장 기본적인 방법 중 하나입니다. 이 장에서는 몇 가지 일반적인 JVM 옵션 구성에 대해 설명합니다.

참고

이 장에 나열된 JVM 옵션은 Red Hat 고객 포털에서 JVM 옵션 구성 툴 을 사용하여 쉽게 생성할 수 있습니다.

4.1. 고정된 힙 크기 설정

메모리 부족 오류를 방지하려면 적절한 힙 크기를 설정해야 합니다.

-Xms 옵션은 초기 힙 크기를 설정하고 -Xmx 는 최대 힙 크기를 설정합니다. 힙 크기가 고정되고 미리 할당되도록 초기 및 최대 힙 크기 옵션을 동일한 크기로 설정하는 프로덕션 환경에 권장됩니다.

예를 들어 다음 옵션은 2048MB 힙 크기를 설정합니다.

-Xms2048M -Xmx2048M
Copy to Clipboard Toggle word wrap

개발 환경에서 로드된 애플리케이션을 테스트하여 최대 메모리 사용량을 결정하는 것이 좋습니다. 프로덕션 힙 크기는 테스트된 최대값보다 25 % 이상 높아서 오버헤드를 위한 공간을 허용해야 합니다.

4.2. 가비지 수집기 구성

병렬 가비지 수집기라고도 하는 병렬 가비지 수집기는 서버 클래스 머신의 Java 8의 기본 가비지 수집기 입니다. 하지만 Red Hat은 Java 9 이후의 기본값인 G1 가비지 수집기를 사용하는 것이 좋습니다. G1 가비지 수집기는 일반적으로 대부분의 시나리오에서 CMS 및 병렬 가비지 수집기보다 성능이 향상됩니다.

G1 컬렉터를 활성화하려면 다음 JVM 옵션을 사용합니다.

-XX:+UseG1GC
Copy to Clipboard Toggle word wrap

4.2.1. 가비지 컬렉션 로깅 옵션

독립 실행형 JBoss EAP 서버에 대해 가비지 컬렉션 로깅은 기본적으로 활성화됩니다.

4.3. 큰 페이지 활성화

JBoss EAP JVM에 대한 대용량 페이지를 활성화하면 메모리에 잠겨 있는 페이지가 생성되고 일반 메모리와 같이 디스크로 스왑할 수 없습니다.

특히 메모리 집약적인 애플리케이션의 경우 대용량 페이지를 사용할 때의 이점은 힙을 디스크에 페이징하거나 스왑할 수 없으므로 항상 쉽게 사용할 수 있다는 것입니다.

대규모 페이지를 사용하는 한 가지 단점은 시스템에서 실행되는 다른 프로세스가 메모리에 빠르게 액세스하지 못할 수 있으므로 이러한 프로세스에 대한 과도한 페이징이 발생할 수 있다는 것입니다.

다른 성능 구성 변경과 마찬가지로 테스트 환경의 변경 사항을 테스트하는 것이 좋습니다.

  1. 운영 체제 구성에서 프로세스가 대규모 페이지를 사용할 수 있는지 확인해야 합니다.

    • Red Hat Enterprise Linux 시스템의 경우 JBoss EAP 프로세스가 대규모 페이지에 액세스할 수 있도록 HugeTLB 페이지를 명시적으로 구성해야 합니다.
    • Windows Server 시스템의 경우 JBoss EAP를 실행하는 사용자에게 큰 페이지 권한이 할당되어 있어야 합니다.

      1. Control Panel → Cryostat ToolsLocal Security Policy 를 선택합니다.
      2. 로컬 정책사용자 권한 할당 을 선택합니다.
      3. 메모리의 페이지 잠금을 두 번 클릭합니다.
      4. 대규모 페이지를 사용하려는 Windows Server 사용자 및 사용자 그룹을 추가합니다.
      5. 시스템을 다시 시작합니다.
  2. 대용량 페이지 지원을 활성화하거나 비활성화합니다.

    • JBoss EAP JVM에 대한 대규모 페이지 지원을 명시적으로 활성화하려면 다음 JVM 옵션을 사용합니다.

      -XX:+UseLargePages
      Copy to Clipboard Toggle word wrap
    • JBoss EAP JVM에 대한 대규모 페이지 지원을 명시적으로 비활성화하려면 다음 JVM 옵션을 사용합니다.

      -XX:-UseLargePages
      Copy to Clipboard Toggle word wrap
  3. JBoss EAP를 시작할 때 메모리 예약과 관련된 경고가 없는지 확인합니다.

    • Red Hat Enterprise Linux에서 오류는 다음과 같습니다.

      OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory. (error = 1)
      Copy to Clipboard Toggle word wrap
    • Windows Server에서 오류는 다음과 같습니다.

      Java HotSpot(TM) 64-Bit Server VM warning: JVM cannot use large page memory because it does not have enough privilege to lock pages in memory.
      Copy to Clipboard Toggle word wrap

    경고가 표시되면 운영 체제 구성 및 JVM 옵션이 올바르게 구성되었는지 확인합니다.

자세한 내용은 대규모 페이지에 대한 Java 지원에 대한 Oracle 설명서 를 참조하십시오.

4.4. ulimits 설정

Red Hat Enterprise Linux 및 Solaris 플랫폼의 경우 JBoss EAP JVM 프로세스에 적합한 ulimit 값을 구성해야 합니다. "soft" ulimit 는 일시적으로 초과할 수 있지만 "하드" ulimit 는 리소스 사용에 대한 엄격한 성정입니다. 적절한 ulimit 값은 환경과 애플리케이션에 따라 다릅니다.

JBoss EAP 프로세스에 적용된 제한이 너무 낮으면 JBoss EAP를 시작할 때 다음과 같은 경고가 표시됩니다.

WARN  [org.jboss.as.warn.fd-limit] (main) WFLYSRV0071: The operating system has limited the number of open files to 1024 for this process; a value of at least 4096 is recommended.
Copy to Clipboard Toggle word wrap

현재 ulimit 값을 보려면 다음 명령을 사용합니다.

  • 소프트 ulimit 값의 경우:

    ulimit -Sa
    Copy to Clipboard Toggle word wrap
  • 하드 ulimit 값의 경우:

    ulimit -Ha
    Copy to Clipboard Toggle word wrap

열려 있는 최대 파일 수에 대해 ulimit 를 설정하려면 적용하려는 수와 함께 다음 명령을 사용하십시오.

  • 열려 있는 최대 파일 수에 대해 소프트 ulimit 를 설정하려면 다음을 수행합니다.

    ulimit -Sn 4096
    Copy to Clipboard Toggle word wrap
  • 열려 있는 최대 파일 수에 대해 hard ulimit 를 설정하려면 다음을 수행합니다.

    ulimit -Hn 4096
    Copy to Clipboard Toggle word wrap
참고

ulimit 설정이 효과적이 되도록 하려면 프로덕션 시스템에서 소프트 및 하드 제한을 동일한 값으로 설정하는 것이 좋습니다.

4.5. 호스트 컨트롤러 및 프로세스 컨트롤러 JVM 튜닝

JBoss EAP 관리형 도메인 호스트에는 호스트 컨트롤러 및 프로세스 컨트롤러에 대한 별도의 JVM이 있습니다.

호스트 컨트롤러 및 프로세스 컨트롤러 JVM 설정을 조정할 수 있지만 대규모 관리형 도메인 환경의 경우 호스트 컨트롤러 및 프로세스 컨트롤러에 대한 기본 JVM 구성만으로도 충분합니다.

호스트 컨트롤러 및 프로세스 컨트롤러 JVM의 기본 구성은 총 도메인 크기 200 JBoss EAP 서버의 경우 각각 10개의 JBoss EAP 서버를 실행하는 최대 20개의 JBoss EAP 호스트의 관리형 도메인 크기로 테스트되었습니다.

대규모 관리형 도메인에 문제가 발생하는 경우 해당 환경에서 호스트 컨트롤러 또는 프로세스 컨트롤러 JVM을 모니터링하여 힙 크기와 같은 JVM 옵션에 대한 적절한 값을 결정해야 할 수 있습니다.

5장. Jakarta Enterprise Cryostats 하위 시스템 튜닝

JBoss EAP는 Jakarta Enterprise Cryostat를 캐시하여 초기화 시간을 절약할 수 있습니다. 이 작업은 polkit 풀을 사용하여 수행됩니다.

JBoss EAP에서 조정할 수 있는 두 개의 다른 GPO 풀, 즉 빈 인스턴스 풀 및ans 스레드 풀이 있습니다.

적절한 Cryostat 풀 크기는 환경과 애플리케이션에 따라 다릅니다. 다양한 oscap 풀 크기를 실험하고 예상되는 실제 조건을 에뮬레이션하는 개발 환경에서 과부하 테스트를 수행하는 것이 좋습니다.

5.1. Cryostat 인스턴스 풀

Cryostat 인스턴스 풀은 SLSB(Stateless Session Cryostat) 및 MDB(Message Driven Cryostats)에 사용됩니다. 기본적으로 SLSB는 인스턴스 풀 default-slsb-instance-pool 을 사용하고, Cryostats는 default-mdb-instance-pool 인스턴스 풀을 사용합니다.

빈 인스턴스 풀의 크기는 한 번에 생성할 수 있는 특정 엔터프라이즈 빈의 인스턴스 수를 제한합니다. 특정 엔터프라이즈 빈의 풀이 가득 차면 클라이언트는 차단하여 인스턴스를 사용할 수 있을 때까지 기다립니다. 클라이언트에서 풀의 시간 제한 특성에 설정된 시간 내에 인스턴스를 가져오지 않으면 예외가 발생합니다.

빈 인스턴스 풀의 크기는 derive-size 또는 max-pool-size 를 사용하여 구성됩니다. derive-size 특성을 사용하면 다음 값 중 하나를 사용하여 풀 크기를 구성할 수 있습니다.

  • from-worker-pools 에서는 최대 풀 크기가 시스템에 구성된 모든 작업자 풀에 대한 총 스레드의 크기에서 파생됨을 나타냅니다.
  • from-cpu-count 는 시스템에서 사용 가능한 총 프로세서 수에서 최대 풀 크기가 파생됨을 나타냅니다. 이는 반드시 1:1 매핑이 아니며 다른 요인에 의해 보강될 수 있습니다.

derive-size 가 정의되지 않은 경우 scaling 인스턴스 풀의 크기에 max-pool- size 값이 사용됩니다.

참고

derive-size 속성은 max-pool-size 에 지정된 모든 값을 재정의합니다. max-pool-size 값을 적용하려면 derive-size 가 정의되지 않아야 합니다.

특정 인스턴스 풀을 사용하도록 엔터프라이즈 빈을 구성할 수 있습니다. 이를 통해 각 엔터프라이즈 빈 유형에서 사용 가능한 인스턴스를 보다 세밀하게 제어할 수 있습니다.

5.1.1. Quarkus 인스턴스 풀 생성

이 섹션에서는 관리 CLI를 사용하여 새 빈 인스턴스 풀을 생성하는 방법을 보여줍니다. Configuration 탭에서 Jakarta Enterprise Cryostats 하위 시스템으로 이동한 다음 Cryostat Pool 탭을 선택하여 관리 콘솔을 사용하여 Quarkus 인스턴스 풀을 구성할 수도 있습니다.

새 인스턴스 풀을 생성하려면 다음 명령 중 하나를 사용합니다.

  • 파생된 최대 풀 크기를 사용하여 sum 인스턴스 풀을 생성하려면 다음을 수행합니다.

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(derive-size=DERIVE_OPTION,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)
    Copy to Clipboard Toggle word wrap

    다음 예제에서는 CPU 수에서 파생된 최대 크기와 2분인 my_derived_pool 이라는 빈 인스턴스 풀을 생성합니다.

    /subsystem=ejb3/strict-max-bean-instance-pool=my_derived_pool:add(derive-size=from-cpu-count,timeout-unit=MINUTES,timeout=2)
    Copy to Clipboard Toggle word wrap
  • 명시적 최대 풀 크기를 사용하여 sum 인스턴스 풀을 생성하려면 다음을 수행합니다.

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(max-pool-size=POOL_SIZE,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)
    Copy to Clipboard Toggle word wrap

    다음 예제에서는 최대 30개의 인스턴스와 시간 제한으로 my_pool 이라는 빈 인스턴스 풀을 생성합니다.

    /subsystem=ejb3/strict-max-bean-instance-pool=my_pool:add(max-pool-size=30,timeout-unit=SECONDS,timeout=30)
    Copy to Clipboard Toggle word wrap

5.1.2. Quarkus에서 사용해야 하는 인스턴스 풀 지정

@org.jboss. Cryostat3.annotation.Pool 주석을 사용하거나 Cryostat의 jboss- Cryostat3. xml 배포 설명자를 수정하여 특정 measure가 사용할 특정 인스턴스 풀을 설정할 수 있습니다.

5.1.3. 기본 8080 인스턴스 풀 비활성화

기본 Cryostat 인스턴스 풀을 비활성화할 수 있으므로 기본적으로 인스턴스 풀을 사용하지 않는 엔터프라이즈 8080이 생성됩니다. 대신 스레드가 엔터프라이즈 콩에서 메서드를 호출해야 하는 경우 새 엔터프라이즈 빈 인스턴스가 생성됩니다. 이 기능은 생성된 엔터프라이즈 빈 인스턴스 수에 제한이 없는 경우 유용할 수 있습니다.

기본 빈 인스턴스 풀을 비활성화하려면 다음 관리 CLI 명령을 사용합니다.

/subsystem=ejb3:undefine-attribute(name=default-slsb-instance-pool)
Copy to Clipboard Toggle word wrap
참고
If a bean is configured to use a particular bean instance pool, disabling the default instance pool does not affect the pool that the bean uses.
Copy to Clipboard Toggle word wrap

5.2. Cryostat 스레드 풀

기본적으로 이름이 default 인 Quarkus 스레드 풀은 비동기 엔터프라이즈 빈 호출 및 엔터프라이즈 빈 타이머에 사용됩니다.

참고

JBoss EAP 7 이후의 원격 엔터프라이즈 빈 요청은 기본적으로 io 하위 시스템에 정의된 작업자에서 처리됩니다.

필요한 경우 서로 다른 hieradata 스레드 풀을 사용하도록 이러한 각 엔터프라이즈 빈 서비스를 구성할 수 있습니다. 이 기능은 각 서비스의 빈 스레드 풀에 대한 액세스를 세밀하게 제어하려는 경우 유용할 수 있습니다.

적절한 스레드 풀 크기를 결정할 때 한 번에 예상되는 동시 요청 수를 고려하십시오.

5.2.1. Cryostat 스레드 풀 생성

이 섹션에서는 관리 CLI를 사용하여 새 8080 스레드 풀을 생성하는 방법을 보여줍니다. 구성 탭에서 Jakarta Enterprise Cryostats 하위 시스템으로 이동하고 왼쪽 메뉴에서 컨테이너 → 스레드 풀을 선택하여 관리 콘솔을 사용하여 Quarkus 스레드 풀 을 구성할 수도 있습니다.

새 스레드 풀을 생성하려면 다음 명령을 사용합니다.

/subsystem=ejb3/thread-pool=POOL_NAME:add(max-threads=MAX_THREADS)
Copy to Clipboard Toggle word wrap

다음 예제에서는 최대 30개의 스레드를 사용하여 my_thread_pool 이라는 Quarkus 스레드 풀을 생성합니다.

/subsystem=ejb3/thread-pool=my_thread_pool:add(max-threads=30)
Copy to Clipboard Toggle word wrap

엔터프라이즈 ImageChange 비동기 호출 서비스 및 타이머 서비스는 각각 특정ans 스레드 풀을 사용하도록 구성할 수 있습니다. 기본적으로 두 서비스 모두 기본 8080 스레드 풀을 사용합니다.

이 섹션에서는 관리 CLI를 사용하여 특정 8080 스레드 풀을 사용하도록 위의 엔터프라이즈 빈 서비스를 구성하는 방법을 보여줍니다. 구성 탭에서 Enterprise Cryostat 하위 시스템으로 이동하여 Services 탭을 선택하고 적절한 서비스를 선택하여 관리 콘솔을 사용하여 이러한 서비스를 구성할 수도 있습니다.

특정 Quarkus 스레드 풀을 사용하도록 엔터프라이즈 빈 서비스를 구성하려면 다음 명령을 사용합니다.

/subsystem=ejb3/service=SERVICE_NAME:write-attribute(name=thread-pool-name,value=THREAD_POOL_NAME)
Copy to Clipboard Toggle word wrap

SERVICE_NAME 을 구성하려는 엔터프라이즈 RAM 서비스로 교체합니다.

  • 엔터프라이즈 빈 비동기 호출 서비스에 대한 async
  • enterprise useful timer service의 timer-service

다음 예제에서는 my_thread_pool 이라는 빈 스레드 풀을 사용하도록 엔터프라이즈 빈 async 서비스를 설정합니다.

/subsystem=ejb3/service=async:write-attribute(name=thread-pool-name,value=my_thread_pool)
Copy to Clipboard Toggle word wrap

5.3. 빈에 대한 런타임 배포 정보

성능 모니터링을 위해 빈에 런타임 배포 정보를 추가할 수 있습니다.

사용 가능한 런타임 데이터에 대한 자세한 내용은 JBoss EAP 관리 모델의 Cryostat 3 하위 시스템을 참조하십시오. 애플리케이션은 빈 코드 또는 배포 설명자에 런타임 데이터를 주석으로 포함할 수 있습니다. 애플리케이션에서 두 옵션을 모두 사용할 수 있습니다.

Jakarta Enterprise Cryostats의 런타임 데이터는 관리 CLI에서 사용할 수 있으므로 자카르타 엔터프라이즈의 성능을 평가할 수 있습니다.

모든 유형의 빈에 대한 런타임 데이터를 검색하는 명령은 다음 패턴을 사용합니다.

/deployment=<deployment_name>/subsystem=ejb3/<bean_type>=<bean_name>:read-resource(include-runtime)
Copy to Clipboard Toggle word wrap

& lt;deployment_name >을 런타임 데이터를 검색할 배포 .jar 파일의 이름으로 바꿉니다. & lt;bean_type >을 런타임 데이터를 검색할ans 유형으로 바꿉니다. 다음 옵션은 이 자리 표시자에 유효합니다.

  • stateless-session-bean
  • stateful-session-bean
  • singleton-bean
  • Message-driven-bean

& lt;bean_name >을 런타임 데이터를 검색할 metrics의 이름으로 바꿉니다.

시스템은 JSON(JavaScript Object Notation) 데이터로 포맷된 stdout 에 결과를 제공합니다.

Cryostat -management.jar라는 파일에 배포된 ManagedSingletonBean 이라는 Singleton 빈의 런타임 데이터를 검색하는 명령의 예

/deployment=ejb-management.jar/subsystem=ejb3/singleton-bean=ManagedSingletonBean:read-resource(include-runtime)
Copy to Clipboard Toggle word wrap

싱글톤 빈에 대한 출력 런타임 데이터의 예

{
    "outcome" => "success",
    "result" => {
        "async-methods" => ["void async(int, int)"],
        "business-local" => ["sample.ManagedSingletonBean"],
        "business-remote" => ["sample.BusinessInterface"],
        "component-class-name" => "sample.ManagedSingletonBean",
        "concurrency-management-type" => undefined,
        "declared-roles" => [
            "Role3",
            "Role2",
            "Role1"
        ],
        "depends-on" => undefined,
        "execution-time" => 156L,
        "init-on-startup" => false,
        "invocations" => 3L,
        "jndi-names" => [
            "java:module/ManagedSingletonBean!sample.ManagedSingletonBean",
            "java:global/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
            "java:app/ejb-management/ManagedSingletonBean!sample.ManagedSingletonBean",
            "java:app/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
            "java:global/ejb-management/ManagedSingletonBean!sample.BusinessInterface",
            "java:module/ManagedSingletonBean!sample.BusinessInterface"
        ],
        "methods" => {"doIt" => {
            "execution-time" => 156L,
            "invocations" => 3L,
            "wait-time" => 0L
        }},
        "peak-concurrent-invocations" => 1L,
        "run-as-role" => "Role3",
        "security-domain" => "other",
        "timeout-method" => "public void sample.ManagedSingletonBean.timeout(javax.ejb.Timer)",
        "timers" => [{
            "time-remaining" => 4304279L,
            "next-timeout" => 1577768415000L,
            "calendar-timer" => true,
            "persistent" => false,
            "info" => "timer1",
            "schedule" => {
                "year" => "*",
                "month" => "*",
                "day-of-month" => "*",
                "day-of-week" => "*",
                "hour" => "0",
                "minute" => "0",
                "second" => "15",
                "timezone" => undefined,
                "start" => undefined,
                "end" => undefined
            }
        }],
        "transaction-type" => "CONTAINER",
        "wait-time" => 0L,
        "service" => {"timer-service" => undefined}
    }
}
Copy to Clipboard Toggle word wrap

Cryostat- management.jar라는 파일에 배포된 NoTimerMDB 라는 메시지 기반 빈의 런타임 데이터를 검색하는 명령의 예

/deployment=ejb-management.jar/subsystem=ejb3/message-driven-bean=NoTimerMDB:read-resource(include-runtime)
Copy to Clipboard Toggle word wrap

메시지 기반 8080의 출력 예

{
    "outcome" => "success",
    "result" => {
        "activation-config" => [
            ("destination" => "java:/queue/NoTimerMDB-queue"),
            ("destinationType" => "javax.jms.Queue"),
            ("acknowledgeMode" => "Auto-acknowledge")
        ],
        "component-class-name" => "sample.NoTimerMDB",
        "declared-roles" => [
            "Role3",
            "Role2",
            "Role1"
        ],
        "delivery-active" => true,
        "execution-time" => 0L,
        "invocations" => 0L,
        "message-destination-link" => "queue/NoTimerMDB-queue",
        "message-destination-type" => "javax.jms.Queue",
        "messaging-type" => "javax.jms.MessageListener",
        "methods" => {},
        "peak-concurrent-invocations" => 0L,
        "pool-available-count" => 16,
        "pool-create-count" => 0,
        "pool-current-size" => 0,
        "pool-max-size" => 16,
        "pool-name" => "mdb-strict-max-pool",
        "pool-remove-count" => 0,
        "run-as-role" => "Role3",
        "security-domain" => "other",
        "timeout-method" => undefined,
        "timers" => [],
        "transaction-type" => "CONTAINER",
        "wait-time" => 0L,
        "service" => undefined
    }
}
Copy to Clipboard Toggle word wrap

  • Stateless Jakarta Enterprise Cryostats 인스턴스 풀이 충분히 크지 않거나 시간 초과가 너무 적습니다.

    javax.ejb.EJBException: JBAS014516: Failed to acquire a permit within 20 SECONDS
         at org.jboss.as.ejb3.pool.strictmax.StrictMaxPool.get(StrictMaxPool.java:109)
    Copy to Clipboard Toggle word wrap
  • 엔터프라이즈 Cryostat 스레드 풀은 충분히 크지 않거나 호출 시간 초과보다 엔터프라이즈 빈이 처리하는 데 시간이 오래 걸리는 경우입니다.

    java.util.concurrent.TimeoutException: No invocation response received in 300000 milliseconds
    Copy to Clipboard Toggle word wrap

5.4.1. 상태 저장 세션 빈의 기본 글로벌 시간 초과 값

Cryostat 3 하위 시스템에서는 default-stateful-bean-session-timeout 특성을 사용하여 서버 인스턴스에 배포된 모든 SFSB(stateful 세션 빈)에 대한 기본 글로벌 시간 초과 값을 구성할 수 있습니다.

default-stateful-bean-session-timeout 특성을 사용하면 Cryostat 3 하위 시스템에서 다음 관리 CLI 작업을 사용할 수 있습니다.

  • 관리 CLI의 read-attribute 작업을 사용하여 속성에 대한 현재 글로벌 시간 초과 값을 확인합니다.
  • 관리 CLI를 사용하여 속성을 구성하는 write-attribute 작업입니다.

특성 동작은 서버 모드에 따라 다릅니다. 예를 들면 다음과 같습니다.

  • 독립 실행형 서버에서 실행하면 구성된 값이 애플리케이션 서버에 배포된 모든 SFSB에 적용됩니다.
  • 관리형 도메인에서 서버를 실행할 때 서버 그룹 내의 서버 인스턴스에 배포된 모든 SFSB는 동시 시간 초과 값을 수신합니다.
참고

속성의 글로벌 시간 초과 값을 변경하면 업데이트된 설정이 새 배포에만 적용됩니다. 서버를 다시 로드하여 현재 배포에 새 설정을 적용해야 합니다.

기본적으로 특성 값은 -1 로 설정되므로 배포된 SFSB가 시간 초과되도록 구성됩니다. 그러나 속성에 대해 다음 두 가지 유효한 값 유형을 구성할 수 있습니다.

  • 특성 값을 0 으로 설정하면 속성은 Cryostat 컨테이너에서 제거할 수 있는 SFSB를 즉시 표시합니다.
  • 특성 값을 0 보다 크게 설정하면 Cryostat 컨테이너가 적합한 SFSB를 제거하기 전에 지정된 시간(밀리초) 동안 SFSB는 유휴 상태로 유지됩니다.
참고

기존 @StatefulTimeout 주석 또는 Cryostat- jar.xml 배포 설명자에 있는 stateful- timeout 요소를 사용하여 SFSB의 시간 초과 값을 구성할 수 있습니다. 그러나 이러한 구성을 설정하면 기본 글로벌 시간 초과 값이 SFSB로 재정의됩니다.

속성에 설정한 새 값을 확인하는 방법은 다음 두 가지가 있습니다.

  • 관리 CLI에서 read-attribute 작업을 사용합니다.
  • 서버의 구성 파일의 Cryostat 3 하위 시스템 섹션을 검사합니다.

6장. 데이터 소스 및 리소스 어댑터 튜닝

연결 풀은 JBoss EAP가 관계형 데이터베이스 또는 리소스 어댑터와 같은 데이터 소스를 사용하는 환경의 성능을 최적화하는 데 사용하는 주요 툴입니다.

데이터 소스 및 리소스 어댑터 연결에 대한 리소스 할당 및 할당은 시간 및 시스템 리소스 측면에서 비용이 많이 듭니다. 연결 풀링은 애플리케이션에서 사용할 수 있는 연결의 '풀'을 생성하여 연결 비용을 줄입니다.

최적의 성능을 위해 연결 풀을 구성하기 전에 부하에서 데이터 소스 풀 통계 또는 리소스 어댑터 통계를 모니터링하여 환경에 대한 적절한 설정을 확인해야 합니다.

6.1. 풀 통계 모니터링

6.1.1. 데이터 소스 통계

데이터 소스에 대해 통계 컬렉션이 활성화되면 데이터 소스에 대한 런타임 통계를 볼 수 있습니다.

6.1.1.1. 데이터 소스 통계 활성화

기본적으로 데이터 소스 통계는 활성화되지 않습니다. 관리 CLI 또는 관리 콘솔을 사용하여 데이터 소스 통계 컬렉션을 활성화할 수 있습니다.

6.1.1.1.1. 관리 CLI를 사용하여 데이터 소스 통계 활성화

다음 관리 CLI 명령을 사용하면 ExampleDS 데이터 소스에 대한 통계 컬렉션을 사용할 수 있습니다.

참고

관리형 도메인에서 이 명령 앞에 /profile=PROFILE_NAME.

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap

변경 사항을 적용하려면 서버를 다시 로드합니다.

6.1.1.1.2. 관리 콘솔을 사용하여 데이터 소스 통계 활성화

관리 콘솔을 사용하여 데이터 소스에 대한 통계 컬렉션을 활성화하려면 다음 단계를 사용합니다.

프로세스

  1. 구성 → Cryo stat Datasources → Datasources → Datasources 로 이동합니다.
  2. 데이터 소스를 선택하고 View 를 클릭합니다.
  3. 특성 탭에서 편집을 클릭합니다.
  4. 통계 활성화 필드를 ON 으로 설정하고 저장을 클릭합니다. 변경 사항을 적용하려면 다시 로드해야 함을 나타내는 팝업이 나타납니다.
  5. 서버를 다시 로드합니다.

    • 독립 실행형 서버의 경우 팝업에서 Reload 링크를 클릭하여 서버를 다시 로드합니다.
    • 관리형 도메인의 경우 팝업에서 토폴로지 링크를 클릭합니다. Topology 탭에서 적절한 서버를 선택하고 Reload drop down 옵션을 선택하여 서버를 다시 로드합니다.
6.1.1.2. 데이터 소스 통계 보기

관리 CLI 또는 관리 콘솔을 사용하여 데이터 소스에 대한 런타임 통계를 볼 수 있습니다.

6.1.1.2.1. 관리 CLI를 사용하여 데이터 소스 통계 보기

다음 관리 CLI 명령은 ExampleDS 데이터 소스에 대한 코어 통계를 검색합니다.

참고

관리형 도메인에서 이러한 명령 앞에 /host=HOST_NAME/server=SERVER_NAME.

/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => 1,
        "AvailableCount" => 20,
        "AverageBlockingTime" => 0L,
        "AverageCreationTime" => 122L,
        "AverageGetTime" => 128L,
        "AveragePoolTime" => 0L,
        "AverageUsageTime" => 0L,
        "BlockingFailureCount" => 0,
        "CreatedCount" => 1,
        "DestroyedCount" => 0,
        "IdleCount" => 1,
        ...
}
Copy to Clipboard Toggle word wrap

다음 관리 CLI 명령은 ExampleDS 데이터 소스에 대한 JDBC 통계를 검색합니다.

/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "PreparedStatementCacheAccessCount" => 0L,
        "PreparedStatementCacheAddCount" => 0L,
        "PreparedStatementCacheCurrentSize" => 0,
        "PreparedStatementCacheDeleteCount" => 0L,
        "PreparedStatementCacheHitCount" => 0L,
        "PreparedStatementCacheMissCount" => 0L,
        "statistics-enabled" => true
    }
}
Copy to Clipboard Toggle word wrap
참고

통계는 런타임 정보이므로 include-runtime=true 인수를 지정해야 합니다.

6.1.1.2.2. 관리 콘솔을 사용하여 데이터 소스 통계 보기

관리 콘솔에서 데이터 소스 통계를 보려면 Runtime 탭에서 Datasources 하위 시스템으로 이동하여 데이터 소스를 선택한 다음 View 를 클릭합니다.

6.1.2. 리소스 어댑터 통계

배포된 리소스 어댑터의 핵심 런타임 통계를 볼 수 있습니다. 사용 가능한 모든 통계에 대한 자세한 목록은 리소스 어댑터 통계 부록을 참조하십시오.

6.1.2.1. 리소스 어댑터 통계 활성화

기본적으로 리소스 어댑터 통계는 활성화되어 있지 않습니다. 다음 관리 CLI 명령은 JNDI에 java:/eis/AcmeConnectionFactory 로 바인딩된 연결 팩토리와 함께 간단한 리소스 어댑터 myRA.rar 에 대한 통계 컬렉션을 활성화합니다.

참고

관리형 도메인에서 명령 앞에 /host=HOST_NAME/server=SERVER_NAME/ 입니다.

/deployment=myRA.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/eis\/AcmeConnectionFactory:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap
6.1.2.2. 리소스 어댑터 통계 보기

리소스 어댑터 통계는 관리 CLI에서 검색할 수 있습니다. 다음 관리 CLI 명령은 JNDI에 java:/eis/AcmeConnectionFactory 로 바인딩된 연결 팩토리와 함께 리소스 어댑터 myRA.rar 에 대한 통계를 반환합니다.

참고

관리형 도메인에서 명령 앞에 /host=HOST_NAME/server=SERVER_NAME/ 입니다.

deployment=myRA.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/eis\/AcmeConnectionFactory:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => "1",
        "AvailableCount" => "20",
        "AverageBlockingTime" => "0",
        "AverageCreationTime" => "0",
        "CreatedCount" => "1",
        "DestroyedCount" => "0",
        "InUseCount" => "0",
        "MaxCreationTime" => "0",
        "MaxUsedCount" => "1",
        "MaxWaitCount" => "0",
        "MaxWaitTime" => "0",
        "TimedOut" => "0",
        "TotalBlockingTime" => "0",
        "TotalCreationTime" => "0"
    }
}
Copy to Clipboard Toggle word wrap
참고

통계는 런타임 정보이므로 include-runtime=true 인수를 지정해야 합니다.

6.2. 풀 속성

이 섹션에서는 최적의 데이터 소스 또는 리소스 어댑터 성능을 위해 구성할 수 있는 선택한 풀 속성의 조언을 자세히 설명합니다.

최소 풀 크기

min-pool-size 속성은 연결 풀의 최소 크기를 정의합니다. 기본 최소 값은 0 연결입니다. 0 min-pool-size 를 사용하면 첫 번째 트랜잭션이 발생할 때 연결이 생성되어 풀에 배치됩니다.

min-pool-size 가 너무 작으면 새 연결을 설정해야 할 수 있으므로 초기 데이터베이스 명령을 실행하는 동안 대기 시간이 길어집니다. min-pool-size 가 너무 크면 데이터 소스 또는 리소스 어댑터에 대한 연결이 끊어집니다.

비활성 기간 동안 연결 풀은 축소되고 min-pool-size 값으로 줄어듭니다.

min-pool-size 를 애플리케이션에 적합한 온디맨드 처리량을 허용하는 연결 수로 설정하는 것이 좋습니다.

최대 풀 크기

max-pool-size 속성은 연결 풀의 최대 크기를 정의합니다. 활성 연결 수를 제한하므로 중요한 성능 매개 변수이므로 동시 활동 양이 제한됩니다.

max-pool-size 가 너무 작으면 요청이 불필요하게 차단될 수 있습니다. max-pool-size 가 너무 크면 처리할 수 있는 것보다 더 많은 리소스를 사용하여 JBoss EAP 환경, 데이터 소스 또는 리소스 어댑터가 발생할 수 있습니다.

로드 중 성능을 모니터링한 후 허용되는 MaxUsedCount 보다 최소 15% 더 높은 max-pool-size 를 설정할 것을 권장합니다. 이렇게 하면 일부 버퍼가 예상 조건보다 높을 수 있습니다.

prefill

pool-prefill 속성은 JBoss EAP가 JBoss EAP가 시작될 때 연결 풀을 최소 연결 수로 미리 채울지 여부를 지정합니다. 기본값은 false입니다.

pool-prefilltrue 로 설정된 경우 JBoss EAP는 시작 시 더 많은 리소스를 사용하지만 초기 트랜잭션에 대한 대기 시간이 줄어듭니다.

min-pool-size 를 최적화한 경우 pool-prefilltrue 로 설정하는 것이 좋습니다.

엄격한 최소값

pool-use-strict-min 속성은 JBoss EAP에서 풀의 연결 수가 지정된 최솟값보다 작은지 여부를 지정합니다.

pool-use-strict-mintrue 로 설정된 경우 JBoss EAP는 연결 수가 지정된 최솟값보다 일시적으로 줄어들도록 허용하지 않습니다. 기본값은 false입니다.

최소 풀 연결 수가 지정되어 있지만 예를 들어 JBoss EAP가 연결을 닫으면 연결이 유휴 상태이고 시간 초과에 도달한 경우, 새 연결을 만들고 풀에 추가하기 전에 총 연결 수가 일시적으로 축소될 수 있습니다.

시간 초과

연결 풀에 구성할 수 있는 시간 초과 옵션이 많이 있지만 성능 튜닝을 위한 중요한 옵션은 idle-timeout-minutes 입니다.

idle-timeout-minutes 속성은 최대 시간(분)을 지정합니다. 연결이 닫히기 전에 유휴 상태일 수 있습니다. 유휴 연결이 닫히면 풀의 연결 수가 지정된 최소값으로 축소됩니다.

시간 초과가 길수록 더 많은 리소스가 사용되지만 요청을 더 빨리 제공할 수 있습니다. 시간 초과가 감소하면 리소스가 적게 사용되지만 새 연결이 생성될 때까지 요청이 대기해야 할 수 있습니다.

6.3. 풀 속성 구성

6.3.1. 데이터 소스 풀 속성 구성

관리 CLI 또는 관리 콘솔을 사용하여 데이터 소스 풀 속성을 구성할 수 있습니다.

사전 요구 사항

  • JDBC 드라이버를 설치합니다.
  • 데이터 소스를 생성합니다.

프로세스

  • 관리 콘솔을 사용하려면 구성 → Cryostats → Datasources → Datasources → Datasources 로 이동하여 데이터 소스를 선택한 다음 View 를 클릭합니다. 풀 옵션은 데이터 소스 탭에서 구성할 수 있습니다. 시간 초과 옵션은 데이터 소스 시간 초과 탭에서 구성할 수 있습니다.
  • 관리 CLI를 사용하려면 다음 명령을 실행합니다.

    /subsystem=datasources/data-source=DATASOURCE_NAME/:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)
    Copy to Clipboard Toggle word wrap

    예를 들어 ExampleDS 데이터 소스 min-pool-size 속성을 5 연결 값으로 설정하려면 다음 명령을 사용합니다.

    /subsystem=datasources/data-source=ExampleDS/:write-attribute(name=min-pool-size,value=5)
    Copy to Clipboard Toggle word wrap

6.3.2. 리소스 어댑터 풀 속성 구성

관리 CLI 또는 관리 콘솔을 사용하여 리소스 어댑터 풀 속성을 구성할 수 있습니다.

사전 요구 사항

  • 리소스 어댑터를 배포하고 연결 정의를 추가합니다.

프로세스

  • 관리 콘솔을 사용하려면 구성 → Cryostat → 리소스 어댑터 로 이동하여 리소스 어댑터를 선택하고 View 를 클릭하고 왼쪽 메뉴에서 연결 정의 를 선택합니다. 풀 옵션은 Pool 탭에서 구성할 수 있습니다. 시간 제한 옵션은 특성 탭에서 구성할 수 있습니다.
  • 관리 CLI를 사용하려면 다음 명령을 실행합니다.

    /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER_NAME/connection-definitions=CONNECTION_DEFINITION_NAME:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)
    Copy to Clipboard Toggle word wrap

    예를 들어 my_RA 리소스 어댑터 my_CD 연결 정의 min-pool-size 속성을 5 연결 값으로 설정하려면 다음 명령을 사용합니다.

    /subsystem=resource-adapters/resource-adapter=my_RA/connection-definitions=my_CD:write-attribute(name=min-pool-size,value=5)
    Copy to Clipboard Toggle word wrap

7장. 메시징 하위 시스템 튜닝

messaging-activemq 하위 시스템에서 메시징 서버에 대한 통계 컬렉션이 활성화되면 메시징 서버의 리소스에 대한 런타임 통계를 볼 수 있습니다.

7.1. 메시징 통계 활성화

성능에 부정적인 영향을 미칠 수 있으므로 messaging-activemq 하위 시스템에 대한 통계 수집은 기본적으로 활성화되어 있지 않습니다. 큐의 메시지 수 또는 큐에 추가된 메시지 수와 같은 기본 정보를 얻기 위해 큐 통계를 활성화할 필요가 없습니다. 이러한 통계는 통계를 true 로 설정하지 않고도 큐 속성을 사용하여 사용할 수 있습니다.

관리 CLI 또는 관리 콘솔을 사용하여 추가 통계 컬렉션을 활성화할 수 있습니다.

7.1.1. 관리 CLI를 사용하여 메시징 통계 활성화

다음 관리 CLI 명령을 사용하면 기본 메시징 서버에 대한 통계 컬렉션을 사용할 수 있습니다.

/subsystem=messaging-activemq/server=default:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap

풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다. 다음 명령을 사용하여 풀링된 연결 팩토리에 대한 통계를 활성화합니다.

/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=statistics-enabled,value=true)
Copy to Clipboard Toggle word wrap

변경 사항을 적용하려면 서버를 다시 로드합니다.

7.1.2. 관리 콘솔을 사용하여 메시징 통계 활성화

관리 콘솔을 사용하여 메시징 서버에 대한 통계 컬렉션을 활성화하려면 다음 단계를 사용합니다.

프로세스

  1. Configuration → Cryostats Messaging(ActiveMQ)Server 로 이동합니다.
  2. 서버를 선택하고 보기를 클릭합니다.
  3. 통계 탭에서 편집을 클릭합니다.
  4. 통계 활성화 필드를 ON 으로 설정하고 저장을 클릭합니다.

풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다. 다음 단계를 사용하여 풀링된 연결 팩토리에 대한 통계 컬렉션을 활성화합니다.

  1. Configuration → Cryostats Messaging(ActiveMQ)Server 로 이동합니다.
  2. 서버를 선택하고 연결을 선택한 다음 보기를 클릭합니다.
  3. Pooled Connection Cryostat 탭을 선택합니다.
  4. 풀링된 연결 팩토리를 선택하고 특성 탭에서 편집을 클릭합니다.
  5. 통계 활성화 필드를 ON 으로 설정하고 저장을 클릭합니다.
  6. 변경 사항을 적용하려면 서버를 다시 로드합니다.

7.2. 메시징 통계 보기

관리 CLI 또는 관리 콘솔을 사용하여 메시징 서버의 런타임 통계를 볼 수 있습니다.

7.2.1. 관리 CLI를 사용하여 메시징 통계 보기

다음 관리 CLI 명령을 사용하여 메시징 통계를 볼 수 있습니다. include-runtime=true 인수를 통계로 포함해야 합니다.

  • 큐의 통계를 확인합니다.
/subsystem=messaging-activemq/server=default/jms-queue=DLQ:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "consumer-count" => 0,
        "dead-letter-address" => "jms.queue.DLQ",
        "delivering-count" => 0,
        "durable" => true,
        ...
    }
}
Copy to Clipboard Toggle word wrap
  • 주제의 통계를 확인합니다.
/subsystem=messaging-activemq/server=default/jms-topic=testTopic:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "delivering-count" => 0,
        "durable-message-count" => 0,
        "durable-subscription-count" => 0,
        ...
    }
}
Copy to Clipboard Toggle word wrap
  • 풀링된 연결 팩토리에 대한 통계를 봅니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra/statistics=pool:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => 1,
        "AvailableCount" => 20,
        "AverageBlockingTime" => 0L,
        "AverageCreationTime" => 13L,
        "AverageGetTime" => 14L,
        ...
    }
}
Copy to Clipboard Toggle word wrap
참고

풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다.

7.2.2. 관리 콘솔을 사용하여 메시징 통계 보기

관리 콘솔에서 메시징 통계를 보려면 Runtime 탭에서 Messaging (ActiveMQ) 하위 시스템으로 이동하여 서버를 선택합니다. 통계를 볼 대상을 선택합니다.

참고

준비 트랜잭션 페이지는 준비된 트랜잭션 을 보고 커밋하고 롤백할 수 있는 위치입니다.

7.3. 메시지 카운터 구성

메시징 서버에 대해 다음 메시지 카운터 특성을 구성할 수 있습니다.

  • message-counter-max-day-history: 메시지 카운터 기록이 유지되는 일 수입니다.
  • message-counter-sample-period: 큐가 샘플링되는 빈도(밀리초)입니다. 이러한 옵션을 구성하는 관리 CLI 명령은 다음 구문을 사용합니다. 'STATISTICS_NAME''STATISTICS_VALUE' 를 구성하려는 통계 이름 및 값으로 교체해야 합니다.
/subsystem=messaging-activemq/server=default::write-attribute(name=STATISTICS_NAME,value=STATISTICS_VALUE)
Copy to Clipboard Toggle word wrap

예를 들어 다음 명령을 사용하여 message-counter-max-day-history 를 5일로 설정하고 message-counter-sample-period 를 2초로 설정합니다.

/subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-max-day-history,value=5)
/subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-sample-period,value=2000)
Copy to Clipboard Toggle word wrap

7.4. 큐의 메시지 카운터 및 기록 보기

다음 관리 CLI 작업을 사용하여 큐의 메시지 카운터 및 메시지 카운터 기록을 볼 수 있습니다.

  • list-message-counter-as-json
  • list-message-counter-as-html
  • list-message-counter-history-as-json
  • list-message-counter-history-as-html

관리 CLI 명령은 이러한 값을 사용하여 다음 구문을 사용합니다. 'QUEUE_NAME''OPERATION_NAME' 을 사용할 대기열 이름 및 작업으로 교체해야 합니다.

/subsystem=messaging-activemq/server=default/jms-queue=QUEUE_NAME:OPERATION_NAME
Copy to Clipboard Toggle word wrap

예를 들어 다음 명령을 사용하여 TestQueue 큐에 대한 메시지 카운터를 JSON 형식으로 확인합니다.

/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:list-message-counter-as-json
{
    "outcome" => "success",
    "result" => "{\"destinationName\":\"TestQueue\",\"destinationSubscription\":null,\"destinationDurable\":true,\"count\":0,\"countDelta\":0,\"messageCount\":0,\"messageCountDelta\":0,\"lastAddTimestamp\":\"12/31/69 7:00:00 PM\",\"updateTimestamp\":\"2/20/18 2:24:05 PM\"}"
}
Copy to Clipboard Toggle word wrap

7.5. 큐의 메시지 카운터 재설정

reset-message-counter 관리 CLI 작업을 사용하여 큐의 메시지 카운터를 재설정할 수 있습니다.

/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:reset-message-counter
{
    "outcome" => "success",
    "result" => undefined
}
Copy to Clipboard Toggle word wrap

7.6. 관리 콘솔을 사용한 런타임 작업

관리 콘솔을 사용하여 다음을 수행할 수 있습니다.

  • 다른 메시징 서버에 대한 장애 조치(failover) 수행
  • 메시징 서버의 모든 메시지 카운터 재설정
  • 메시징 서버의 모든 메시지 카운터 기록 재설정
  • 메시징 서버와 관련된 정보 보기
  • 메시징 서버의 연결 닫기
  • 롤백 트랜잭션
  • 트랜잭션 커밋

7.6.1. 다른 메시징 서버에 대한 장애 조치(failover) 수행

관리 콘솔을 사용하여 다른 메시징 서버로 강제 장애 조치를 수행할 수 있습니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server 로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer를 클릭합니다.
  3. View (보기) 옆에 있는 화살표 버튼을 클릭하고 Force Cryostat를 클릭합니다.
  4. Force Cryostat 창에서 예를 클릭합니다.

7.6.2. 메시징 서버의 모든 메시지 카운터 재설정

관리 콘솔을 사용하여 메시징 서버의 모든 메시지 카운터를 재설정할 수 있습니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server 로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer를 클릭합니다.
  3. 보기 옆에 있는 화살표 버튼을 클릭하고 재설정 을 클릭합니다.
  4. 재설정 창에서 모든 메시지 카운터 재설정 옆에 있는 토글 버튼을 클릭하여 기능을 활성화합니다.

    이제 버튼이 파란색 배경에 ON 으로 표시됩니다.

  5. 재설정 을 클릭합니다.

7.6.3. 메시징 서버의 메시지 카운터 기록 재설정

관리 콘솔을 사용하여 메시징 서버의 메시지 카운터 기록을 재설정할 수 있습니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server 로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer를 클릭합니다.
  3. 보기 옆에 있는 화살표 버튼을 클릭하고 재설정 을 클릭합니다.
  4. 재설정 창에서 모든 메시지 카운터 기록 재설정 옆에 있는 토글 버튼을 클릭하여 기능을 활성화합니다.

    이제 버튼이 파란색 배경에 ON 으로 표시됩니다.

  5. 재설정 을 클릭합니다.

7.6.5. 메시징 서버의 연결 닫기

IP 주소, ActiveMQ 주소 일치 또는 사용자 이름을 제공하여 연결을 닫을 수 있습니다.

메시징 서버의 연결을 종료하려면 다음을 수행합니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server 로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer 를 클릭한 다음 View 를 클릭합니다.
  3. 탐색 창에서 연결을 클릭합니다.
  4. 닫기 창에서 연결을 종료할 적절한 탭을 클릭합니다.
  5. 선택 사항에 따라 IP 주소, ActiveMQ 주소 일치 또는 사용자 이름을 입력한 다음 닫기 를 클릭합니다.

7.6.6. 메시징 서버의 트랜잭션 롤백

관리 콘솔을 사용하여 메시징 서버의 트랜잭션을 롤백할 수 있습니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server 로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer 를 클릭한 다음 View 를 클릭합니다.
  3. 탐색 창에서 트랜잭션 을 클릭합니다.
  4. 롤백할 트랜잭션을 선택하고 롤백 을 클릭합니다.

7.6.7. 메시징 서버에 대한 트랜잭션 커밋

관리 콘솔을 사용하여 메시징 서버의 트랜잭션을 커밋할 수 있습니다.

프로세스

  1. 관리 콘솔에 액세스하여 다음 중 하나를 사용하여 Server로 이동합니다.

    • 런타임검색호스트호스트서버
    • 런타임찾아보기서버 그룹서버 그룹서버
  2. Messaging ActiveMQServer 를 클릭한 다음 View 를 클릭합니다.
  3. 탐색 창에서 트랜잭션 을 클릭합니다.
  4. 커밋할 트랜잭션을 선택하고 커밋을 클릭합니다.

7.7. 자카르타 메시징 튜닝

Jakarta Messaging API를 사용하는 경우 다음 정보를 검토하여 성능을 개선하는 방법에 대한 팁을 검토하십시오.

  • 메시지 ID를 비활성화합니다.

    메시지 ID가 필요하지 않은 경우 MessageProducer 클래스에서 setDisableMessageID() 메서드를 사용하여 해당 ID를 비활성화합니다. 값을 true로 설정하면 고유한 ID를 생성하는 오버헤드가 제거되고 메시지 크기가 줄어듭니다.

  • 메시지 타임스탬프를 비활성화합니다.

    메시지 타임스탬프가 필요하지 않은 경우 MessageProducer 클래스에서 setDisableMessageTimeStamp() 메서드를 사용하여 비활성화합니다. 값을 true로 설정하면 타임스탬프를 생성하는 오버헤드가 제거되고 메시지 크기가 줄어듭니다.

  • ObjectMessage 를 사용하지 마십시오.

    ObjectMessage 는 직렬화된 개체가 포함된 메시지를 보내는 데 사용됩니다. 즉, 메시지의 본문 또는 페이로드가 바이트 스트림으로 유선을 통해 전송됩니다. Java 직렬화된 형태의 작은 오브젝트도 매우 크며, 유선에서 많은 공간을 차지합니다. 또한 사용자 지정 마샬링 기술과 비교하면 속도가 느려집니다. 런타임까지 페이로드 유형을 모르는 경우와 같이 다른 메시지 유형 중 하나를 사용할 수 없는 경우에만 ObjectMessage 를 사용하십시오.

  • AUTO_ACKNOWLEDGE 를 피하십시오.

    소비자에서 승인 모드를 선택하면 네트워크를 통해 전송된 확인 메시지를 전송하여 발생하는 추가 오버헤드 및 트래픽으로 인해 성능에 영향을 미칩니다. AUTO_ACKNOWLEDGE 는 클라이언트에서 수신된 각 메시지에 대해 서버에서 승인이 필요하므로 이러한 오버헤드가 발생합니다. 가능한 경우 DUPS_OK_ACKNOWLEDGE 를 사용하여 지연된 방식으로 메시지를 승인합니다. 즉, 클라이언트 코드는 메시지를 승인하거나 트랜스크립션에서 커밋하여 많은 승인을 받기 위해 메서드를 호출합니다.

  • Cryostat 메시지를 방지합니다.

    기본적으로 자카르타 메시징 메시지는 자카르타 메시징 메시지입니다. Cryostat 메시지가 필요하지 않은 경우 해당 메시지를 확인할 수 없음으로 설정합니다. Cryostat 메시지는 스토리지에 유지되므로 많은 오버헤드가 발생합니다.

  • TRANSACTED_SESSION 모드를 사용하여 단일 트랜잭션으로 메시지를 보내고 받습니다.

    단일 트랜잭션으로 메시지를 일괄 처리하여 JBoss EAP에 통합된 ActiveMQ Artemis 서버에는 모든 전송 또는 수신이 아닌 커밋에 하나의 네트워크 라운드트립만 필요합니다.

7.8. 지속성 튜닝

  • 메시지 저널을 자체 물리 볼륨에 배치합니다.

    추가 전용 저널의 이점 중 하나는 디스크 헤드 이동이 최소화된다는 것입니다. 디스크가 공유되면 이 이점이 손실됩니다. 트랜잭션 코디네이터, 데이터베이스 및 기타 저널과 같은 여러 프로세스가 동일한 디스크에서 읽고 쓰는 경우 디스크 헤드가 다른 파일 간에 건너뛰어야 하므로 성능에 영향을 미칩니다. 페이징 또는 대용량 메시지를 사용하는 경우 별도의 볼륨에도 배치되었는지 확인합니다.

  • journal-min-files 값을 조정합니다.

    journal-min-files 매개변수를 평균 지속 가능한 비율에 맞는 파일 수로 설정합니다. 저널 데이터 디렉토리에 새 파일이 생성되는 경우가 많습니다. 즉, 많은 데이터가 유지되고 있는 경우 최소한의 파일 수를 늘려야 합니다. 이를 통해 저널은 새 데이터 파일을 생성하지 않고 재사용할 수 있습니다.

  • 저널 파일 크기를 최적화합니다.

    저널 파일 크기는 디스크의 용량에 맞춰야 합니다. 10MB 의 기본값은 대부분의 시스템에서 충분해야 합니다.

  • AIO 저널 유형을 사용합니다.

    Linux 운영 체제의 경우 저널 유형을 AIO 로 유지합니다. AIO 는 Java NIO 보다 더 잘 확장합니다.

  • journal-buffer-timeout 값을 조정합니다.

    journal-buffer-timeout 값을 늘리면 대기 시간이 지남에 따라 처리량이 증가합니다.

  • journal-max-io 값을 조정합니다.

    AIO 를 사용하는 경우 journal-max-io 매개변수 값을 늘려 성능을 향상시킬 수 있습니다. NIO 를 사용하는 경우 이 값을 변경하지 마십시오.

7.9. 기타 튜닝 옵션

이 섹션에서는 조정할 수 있는 JBoss EAP 메시징의 다른 위치에 대해 설명합니다.

  • 비동기 send acknowledgements를 사용합니다.

    비-고속적인 메시지를 보내야 하고 send() 반환 시 서버에 도달했다는 보장이 필요하지 않은 경우, 차단을 전송하도록 설정하지 마십시오. 대신 비동기 send acknowledgements를 사용하여 송신 승인을 별도의 스트림에서 반환합니다. 그러나 서버가 충돌하는 경우 일부 메시지가 손실될 수 있습니다.

  • 사전 인증 모드를 사용합니다.

    사전 확인 모드를 사용하면 메시지가 클라이언트에 전송되기 전에 확인됩니다. 이렇게 하면 유선의 승인 트래픽 양이 줄어듭니다. 그러나 해당 클라이언트가 충돌하면 클라이언트가 다시 연결되면 메시지가 다시 전달되지 않습니다.

  • 보안을 비활성화합니다.

    security-enabled 특성을 false로 설정하여 보안을 비활성화할 때 약간의 성능 향상이 있습니다.

  • 지속성을 비활성화합니다.

    persistence-enabledfalse 로 설정하여 메시지 지속성을 완전히 해제할 수 있습니다.

  • 트랜잭션을 즉시 동기화합니다.

    journal-sync- Cryo statal을 false 로 설정하면 실패 시 트랜잭션이 손실될 가능성이 낮을 때 더 나은 트랜잭션 영구 성능이 제공됩니다.

  • 즉시 동기화되지 않습니다.

    journal-sync-non- #159al을 false 로 설정하면 실패 시에 message가 손실될 가능성이 없어 더 나은 비관계 영구 성능이 제공됩니다.

  • 메시지가 차단되지 않도록 보냅니다.

    전송된 모든 메시지의 네트워크 라운드 트립을 기다리지 않으려면 Jakarta Messaging 및 JNDI를 사용하는 경우 block-on-durable-send 및 block- on-durable-send를 false 로 설정하거나 setBlockOnDurableSend() 및 setBlockOn DurableSend() 메서드를 호출하여 ServerLocator 에서 직접 설정합니다.

  • consumer-window-size 를 최적화합니다.

    매우 빠른 소비자가 있는 경우 소비자 흐름 제어를 효과적으로 비활성화하도록 consumer-window-size 를 늘릴 수 있습니다.

  • Jakarta Messaging API 대신 코어 API를 사용합니다.

    Jakarta Messaging 작업은 서버에서 처리할 수 있기 전에 핵심 작업으로 변환되어 코어 API를 사용할 때보다 성능이 저하됩니다. 코어 API를 사용하는 경우 SimpleString 을 최대한 많이 사용하는 방법을 사용하십시오. simpleString.lang.String과 달리 java.lang.String 과 달리, 복사가 필요하지 않으므로 호출 간에 SimpleString 인스턴스를 재사용하면 불필요한 복사를 방지할 수 있습니다. 핵심 API는 다른 브로커에 이식할 수 없습니다.

7.10. 안티 패턴 방지

  • 연결, 세션, 소비자 및 생산자를 가능한 경우 재사용합니다.

    가장 일반적인 메시징 안티 패턴은 전송 또는 소비되는 모든 메시지에 대해 새로운 연결, 세션 및 생산자를 생성하는 것입니다. 이러한 오브젝트는 생성하는데 시간이 걸리며 여러 네트워크 라운드트립이 포함될 수 있으므로 리소스를 사용하지 못할 수 있습니다. 항상 재사용하십시오.

참고

Spring Messaging 템플릿과 같은 일부 널리 사용되는 라이브러리는 이러한 패턴을 사용합니다. Spring Messaging 템플릿을 사용하는 경우 성능이 저하될 수 있습니다. Spring Messaging 템플릿은 Jakarta Messaging 세션을 캐시하는 애플리케이션 서버에서만 사용할 수 있습니다(예: Jakarta Connectors 사용), 메시지 전송에만 사용할 수 있습니다. 애플리케이션 서버에서도 동기적으로 사용하는 메시지에 안전하게 사용할 수 없습니다.

  • fat message를 피하십시오.

    XML과 같은 상세 형식은 유선에 많은 공간을 차지하며 결과적으로 성능이 저하됩니다. 가능한 경우 메시지 본문에서 XML을 방지할 수 있습니다.

  • 각 요청에 대해 임시 큐를 생성하지 마십시오.

    이러한 일반적인 안티 패턴에는 임시 큐 요청 응답 패턴이 포함됩니다. 임시 큐 요청-응답 패턴을 사용하면 메시지가 대상으로 전송되고 응답 헤더가 로컬 임시 큐의 주소로 설정됩니다. 수신자가 메시지를 수신하면 이를 처리한 다음 reply-to 헤더에 지정된 주소로 응답을 보냅니다. 이 패턴으로 인해 발생하는 일반적인 실수는 전송되는 각 메시지에 새 임시 큐를 생성하여 성능을 크게 줄이는 것입니다. 대신 여러 요청에 임시 큐를 재사용해야 합니다.

  • 필요한 경우가 아니면 메시지 기반 빈을 사용하지 마십시오.

    Cryostat를 사용하여 메시지를 사용하는 것은 간단한 Jakarta 메시징 메시지 소비자를 사용하여 메시지를 사용하는 것보다 느립니다.

8장. 로깅 하위 시스템 튜닝

콘솔에 로깅을 비활성화하고 적절한 로깅 수준을 구성하고, 로그 파일을 저장할 최상의 위치를 지정하여 프로덕션 환경에서 JBoss EAP 로깅 하위 시스템 성능을 추가로 개선할 수 있습니다.

8.1. 콘솔에 로깅 비활성화

콘솔 로깅을 비활성화하면 JBoss EAP 성능이 향상될 수 있습니다. 콘솔에 로그를 출력하는 것은 개발 및 테스트 환경에 유용할 수 있지만 프로덕션 환경에서는 대부분의 경우 필요하지 않습니다. JBoss EAP 루트 로거에는 standalone-full-ha 를 제외한 모든 기본 독립 실행형 서버 프로필에 대한 콘솔 로그 처리기가 포함되어 있습니다. 기본 관리형 도메인 프로필에는 콘솔 처리기가 포함되어 있지 않습니다.

루트 로거에서 기본 콘솔 핸들러를 제거하려면 다음 관리 CLI 명령을 사용합니다.

/subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)
Copy to Clipboard Toggle word wrap

8.2. 로깅 수준 구성

이상적인 성능을 위해서는 프로덕션 환경에 대한 로깅 수준을 적절하게 구성해야 합니다. 예를 들어 INFO 또는 DEBUG 수준은 개발 또는 테스트 환경에 적합하지만 대부분의 경우 프로덕션 환경 로깅 수준을 WARN 또는 ERROR 와 같은 더 높은 값으로 설정해야 합니다.

8.3. 로그 파일의 위치 구성

로그 파일의 스토리지 위치를 잠재적인 성능 문제로 고려해야 합니다. I/O 처리량이 좋지 않은 파일 시스템 또는 디스크 구성에 로그를 저장하면 전체 플랫폼의 성능에 영향을 미칠 수 있습니다.

로깅이 JBoss EAP 성능에 영향을 미치지 않도록 하려면 공간이 많은 고성능 전용 디스크로 로그 위치를 설정하는 것이 좋습니다.

9장. Cryostat 하위 시스템 튜닝

JBoss EAP 7에서 도입된 비차단 I/O(NIO) 하위 시스템은 JBoss EAP 6의 이전 하위 시스템에 비해 성능이 크게 향상되었습니다. 환경에 대한 undertow 하위 시스템을 튜닝할 수 있는 방법은 다음과 같습니다.

  • 버퍼 캐시 구성
  • 바이트 버퍼 풀 구성
  • Jakarta 서버 페이지 구성 옵션
  • 리스너 구성 옵션
  • 세션 특성 마샬링

9.1. 버퍼 캐시 구성

버퍼 캐시는 undertow 하위 시스템에서 처리하는 정적 파일을 저장합니다. 여기에는 이미지, 정적 HTML, CSS 및 JavaScript 파일이 포함됩니다. 각 Cryostat 서블릿 컨테이너에 대한 기본 버퍼 캐시를 지정할 수 있습니다. 서블릿 컨테이너에 최적화된 버퍼 캐시를 사용하면 정적 파일을 제공하기 위해 Cryostat 성능을 향상시킬 수 있습니다.

버퍼 캐시의 버퍼는 지역에 할당되며 고정된 크기입니다. 각 버퍼 캐시에는 세 가지 구성 가능한 속성이 있습니다.

buffer-size
개별 버퍼의 크기(바이트)입니다. 기본값은 1024바이트입니다. 가장 큰 정적 파일을 완전히 저장하도록 버퍼 크기를 설정합니다.
buffers-per-region
영역당 버퍼 수입니다. 기본값은 1024입니다.
max-regions
버퍼 캐시에 할당된 최대 메모리 양을 설정하는 최대 리전 수입니다. 기본값은 10개 지역입니다.

버퍼 크기, 영역당 버퍼 수 및 최대 영역 수를 곱하여 버퍼 캐시에서 사용하는 최대 메모리 양을 계산할 수 있습니다. 예를 들어 기본 버퍼 캐시는 리전당 1024바이트 * 1024 버퍼 * 10개 리전 = 10MB입니다.

정적 파일의 크기 및 테스트 결과 개발 환경에서 예상되는 로드를 기반으로 버퍼 캐시를 구성합니다. 성능에 미치는 영향을 결정할 때 사용된 메모리와 버퍼 캐시 성능 이점의 균형을 고려하십시오.

9.2. 바이트 버퍼 풀 구성

Cryostat 바이트 버퍼 풀은 풀링된 NIO Cryostat Buffer 인스턴스를 할당하는 데 사용됩니다. 모든 리스너에는 바이트 버퍼 풀이 있으며 각 리스너에 서로 다른 버퍼 풀과 작업자를 사용할 수 있습니다. 바이트 버퍼 풀은 서로 다른 서버 인스턴스 간에 공유할 수 있습니다.

성능에 상당한 영향을 미치는 기본 바이트 버퍼 풀 속성은 버퍼 크기 입니다. 기본값은 시스템의 RAM 리소스를 기반으로 계산되며 대부분의 경우 충분합니다. 이 속성을 수동으로 구성하는 경우 대부분의 서버에 이상적인 크기는 16KB입니다.

9.3. Jakarta 서버 페이지 구성 옵션

다음 Jakarta 서버 페이지 구성 옵션은 Jakarta 서버 페이지를 Java 바이트 코드로 컴파일하는 방법에 대한 최적화를 제공합니다.

generate-strings-as-char-arrays
Jakarta 서버 페이지에 많은 문자열 상수가 포함된 경우 이 옵션을 사용하면 문자열 상수를 char 배열로 변환하여 스크립트릿이 최적화됩니다.
optimize-scriptlets
Jakarta 서버 페이지에 많은 문자열 연결을 포함하는 경우 이 옵션을 사용하면 모든 Jakarta 서버 페이지 요청에 대한 문자열 연결을 제거하여 스크립트릿이 최적화됩니다.
Trim-spaces
Jakarta 서버 페이지에 많은 공백이 포함된 경우 이 옵션을 사용하면 HTTP 요청의 공백을 트리밍하고 HTTP 요청 페이로드를 줄입니다.

9.3.1. 관리 콘솔을 사용하여 Jakarta 서버 페이지 옵션 활성화

관리 콘솔을 사용하여 Cryostat 자카르타 서버 페이지 구성 옵션을 활성화하려면 다음 단계를 완료하십시오.

프로세스

  1. Configuration → Cryostats Web (Undertow)Servlet Container 로 이동합니다.
  2. 구성할 서블릿 컨테이너를 선택하고 보기를 클릭합니다.
  3. Jakarta 서버 페이지를 선택하고 편집을 클릭합니다.
  4. 활성화할 각 옵션에 대해 필드를 ON 으로 설정한 다음 저장을 클릭합니다.

9.3.2. 관리 CLI를 사용하여 Jakarta 서버 페이지 옵션 활성화

관리 CLI를 사용하여 Cryostat 자카르타 서버 페이지 구성 옵션을 활성화하려면 다음 단계를 완료하십시오.

프로세스

  • 다음 명령을 사용합니다.
/subsystem=undertow/servlet-container=__SERVLET_CONTAINER__/setting=jsp/:write-attribute(name=__OPTION_NAME__,value=true)
Copy to Clipboard Toggle word wrap

예를 들어 기본 서블릿 컨테이너에 대해 generate-strings-as-char-arrays 를 활성화하려면 다음 명령을 사용합니다.

/subsystem=undertow/servlet-container=default/setting=jsp/:write-attribute(name=generate-strings-as-char-arrays,value=true)
Copy to Clipboard Toggle word wrap

9.4. 리스너 구성 옵션

애플리케이션 및 환경에 따라 특정 유형의 트래픽과 같이 특정 유형의 트래픽과 같은 여러 리스너를 구성한 다음 각 리스너에 대한 옵션을 구성할 수 있습니다.

다음은 HTTP, HTTPS 및 Cryostat 리스너에 구성할 수 있는 성능 관련 옵션입니다.

max-connections

리스너에서 처리할 수 있는 최대 동시 연결 수입니다. 기본적으로 이 속성은 정의되지 않으므로 무제한 연결이 생성됩니다.

이 옵션을 사용하여 리스너가 처리할 수 있는 연결 수를 설정할 수 있으므로 리소스 사용량을 제한하는 데 유용할 수 있습니다. 이 값을 구성할 때 워크로드 및 트래픽 유형을 고려해야 합니다. 아래 no-request-timeout 도 참조하십시오.

no-request-timeout

연결이 닫히기 전에 유휴 상태인 시간(밀리초)입니다. 기본값은 60000밀리초(1분)입니다.

최적의 연결 효율성을 위해 환경에서 이 옵션을 조정하면 네트워크 성능을 향상시킬 수 있습니다. 유휴 연결이 조기에 닫히면 연결을 다시 설정하는 데 오버헤드가 있습니다. 유휴 연결이 너무 긴 경우 리소스를 불필요하게 사용합니다.

max-header-size

HTTP 요청 헤더의 최대 크기(바이트)입니다. 기본값은 1048576(1024KB)입니다.

헤더 크기를 제한하면 서비스 거부 공격을 방지하는 데 유용할 수 있습니다.

buffer-pool

리스너에 사용할 io 하위 시스템의 버퍼 풀을 지정합니다. 기본적으로 모든 리스너는 기본 버퍼 풀을 사용합니다.

이 옵션을 사용하여 각 리스너가 고유한 버퍼 풀을 사용하도록 구성하거나 여러 리스너에서 동일한 버퍼 풀을 사용하도록 구성할 수 있습니다.

worker

undertow 하위 시스템은 io 하위 시스템을 사용하여 XNIO 작업자를 제공합니다. 이 옵션은 리스너가 사용하는 XNIO 작업자를 지정합니다. 기본적으로 리스너는 io 하위 시스템에서 기본 작업자를 사용합니다.

특정 유형의 네트워크 트래픽에 다른 작업자 리소스를 할당할 수 있도록 각 리스너를 특정 작업자를 사용하도록 구성하는 것이 유용할 수 있습니다.

9.4.1. 관리 콘솔을 사용하여 리스너 옵션 구성

관리 콘솔을 사용하여 리스너 옵션을 구성하려면 다음 단계를 완료합니다.

프로세스

  1. Configuration → Cryostats Web (Undertow)Server 로 이동합니다.
  2. 구성할 서버를 선택하고 보기를 클릭합니다.
  3. 왼쪽 메뉴에서 Listener 를 선택한 다음 구성할 리스너 유형을 선택하고 (예: HTTP Listener ) 표에서 리스너를 선택합니다.
  4. 편집을 클릭하고 구성할 옵션을 수정한 다음 저장을 클릭합니다.

9.4.2. 관리 CLI를 사용하여 리스너 옵션 구성

관리 CLI를 사용하여 리스너 옵션을 구성하려면 다음 단계를 완료합니다.

프로세스

  • 다음 명령을 사용합니다.
/subsystem=undertow/server=SERVER_NAME/LISTENER_TYPE=LISTENER_NAME:write-attribute(name=OPTION_NAME,value=OPTION_VALUE)
Copy to Clipboard Toggle word wrap

예를 들어 default - server Cryostat 서버에서 기본 HTTP 리스너에 대해 max- connections100000 으로 설정하려면 다음 명령을 사용합니다.

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-connections,value=100000)
Copy to Clipboard Toggle word wrap

10장. IO 하위 시스템 튜닝

io 하위 시스템은 other JBoss EAP 하위 시스템에서 사용하는 XNIO 작업자 및 버퍼 풀을 정의합니다(예: Cryostat 및 Remoting).

10.1. 작업자 구성

각각 고유한 성능 구성이 있고 다른 I/O 작업을 처리하는 개별 작업자를 여러 개 생성할 수 있습니다. 예를 들어, 하나의 작업자를 생성하여 HTTP I/O를 처리하고, 다른 작업자를 생성하여 자카르타 Enterprise Cryostat I/O를 처리한 다음 특정 로드 요구 사항에 맞게 각 작업자의 속성을 별도로 구성할 수 있습니다.

성능에 상당한 영향을 미치는 작업자 속성에는 작업자가 사용할 수 있는 총 I/O 스레드 수를 설정하는 io-threads 와 특정 작업에 사용할 수 있는 최대 스레드 수를 설정하는 task-max-threads 가 포함됩니다. 이 두 속성의 기본값은 서버의 CPU 수에 따라 계산됩니다.

10.1.1. 작업자 통계 모니터링

관리 CLI를 사용하여 작업자의 런타임 통계를 볼 수 있습니다. 이렇게 하면 연결 수, 스레드 수 및 큐 크기와 같은 작업자 통계가 노출됩니다.

다음 명령은 기본 작업자의 런타임 통계를 표시합니다.

/subsystem=io/worker=default:read-resource(include-runtime=true,recursive=true)
Copy to Clipboard Toggle word wrap
참고

core-pool-size 통계로 추적되는 코어 스레드의 수는 현재 max-pool-size 통계에서 추적하는 최대 스레드 수와 동일한 값으로 항상 설정됩니다.

10.2. 버퍼 풀 구성

참고

IO 버퍼 풀은 더 이상 사용되지 않지만 현재 릴리스에서 기본값으로 설정됩니다.

io 하위 시스템의 버퍼 풀은 I/O 작업에 특별히 사용되는 풀링된 NIO 버퍼 인스턴스입니다. 작업자와 마찬가지로 특정 I/O 작업을 처리하기 위해 전용할 수 있는 별도의 버퍼 풀을 생성할 수 있습니다.

성능에 상당한 영향을 미치는 주요 버퍼 풀 속성은 버퍼 크기 입니다. 기본값은 시스템의 RAM 리소스를 기반으로 계산되며 대부분의 경우 충분합니다. 이 속성을 수동으로 구성하는 경우 대부분의 서버에 이상적인 크기는 16KB입니다.

11장. Cryostat 하위 시스템 튜닝

최적의 네트워크 성능을 위해서는 이를 지원하는 환경에서 UDP 멀티 캐스트를 사용하는 것이 좋습니다.

참고

TCP는 더 많은 오버헤드를 가지며 오류 검사, 패킷 순서 및 정체 제어 자체를 처리하기 때문에 UDP보다 느리게 간주됩니다. Cryostat는 UDP용 이러한 기능을 처리하는 반면 TCP는 자체적으로 기능을 보장합니다. 신뢰할 수 없거나 높은 혼잡 네트워크에서 Cryostat를 사용하거나 멀티 캐스트를 사용할 수 없는 경우 TCP를 선택하는 것이 좋습니다.

이 장에서는 Cryostat 클러스터 통신에서 사용할 TCP(UDP 또는 TCP) 및 통신 프로토콜을 선택했다고 가정합니다.

11.1. Cryostat 통계 모니터링

jgroups 하위 시스템의 통계를 활성화하여 관리 CLI 또는 Cryostat를 통해 JBoss EAP 클러스터링을 모니터링할 수 있습니다.

참고

통계를 활성화하면 성능에 부정적인 영향을 미칩니다. 필요한 경우에만 통계를 활성화합니다.

프로세스

  1. 다음 명령을 사용하여 Cryostat 채널에 대한 통계를 활성화합니다.

    참고

    관리형 도메인에서 이러한 명령 앞에 /profile=PROFILE_NAME.

    /subsystem=jgroups/channel=CHANNEL_NAME:write-attribute(name=statistics-enabled,value=true)
    Copy to Clipboard Toggle word wrap

    예를 들어 다음 명령을 사용하여 기본 ee 채널에 대한 통계를 활성화합니다.

    /subsystem=jgroups/channel=ee:write-attribute(name=statistics-enabled,value=true)
    Copy to Clipboard Toggle word wrap
  2. JBoss EAP 서버를 다시 로드합니다.

    reload
    Copy to Clipboard Toggle word wrap
  3. 이제 관리 CLI를 사용하거나 JVM 모니터링 툴을 통해 Cryostat 통계를 볼 수 있습니다.

    • 관리 CLI를 사용하려면 statistics를 보려는 Cryostat 채널 또는 프로토콜에서 :read-resource(include-runtime=true) 명령을 사용합니다.

      참고

      관리형 도메인에서 이러한 명령 앞에 /host=HOST_NAME/server=SERVER_NAME.

      예를 들면 다음과 같습니다.

    • ee 채널의 통계를 보려면 다음 명령을 사용합니다.

      /subsystem=jgroups/channel=ee:read-resource(include-runtime=true)
      Copy to Clipboard Toggle word wrap
    • ee 채널에서 FD_ALL 프로토콜의 통계를 보려면 다음 명령을 사용합니다.

      /subsystem=jgroups/channel=ee/protocol=FD_ALL:read-resource(include-runtime=true)
      Copy to Clipboard Toggle word wrap
    • JVM 모니터링 툴을 사용하여 JBoss EAP에 연결하려면 성능 모니터링 장을 참조하십시오. Cryostat 연결을 통해 통계를 볼 수 있습니다.

11.2. 네트워킹 및 점보 프레임

가능한 경우 Cryostat 트래픽의 네트워크 인터페이스는 전용 VLAN(Virtual Local Area Network)의 일부여야 합니다. 이를 통해 클러스터 통신을 다른 JBoss EAP 네트워크 트래픽과 분리하여 클러스터 네트워크 성능, 처리량 및 보안을 보다 쉽게 제어할 수 있습니다.

클러스터 성능을 개선하기 위해 고려해야 할 또 다른 네트워크 구성은 점보 프레임을 활성화하는 것입니다. 네트워크 환경이 지원하는 경우 MTU(Maximum Transmission Unit)를 늘려 점보 프레임을 활성화하면 특히 처리량이 높은 환경에서 네트워크 성능을 향상시키는 데 도움이 될 수 있습니다.

점보 프레임을 사용하려면 네트워크의 모든 NIC 및 스위치가 이를 지원해야 합니다.

11.3. 메시지 번들

Cryostat의 메시지 번들링은 여러 개의 작은 메시지를 더 큰 번들로 어셈블하여 네트워크 성능을 향상시킵니다. 네트워크를 통해 많은 작은 메시지를 클러스터 노드로 보내는 대신 최대 번들 크기에 도달하거나 전송할 메시지가 없을 때까지 메시지가 대기열에 추가됩니다. 대기 중인 메시지는 더 큰 메시지 번들로 어셈블된 후 전송됩니다.

이 번들링은 특히 네트워크 통신에 대한 오버헤드가 높은 TCP 환경에서 통신 오버헤드를 줄입니다.

11.3.1. 메시지 번들 구성

Cryostat 메시지 번들링은 max_bundle_size 속성을 사용하여 구성됩니다. 기본 max_bundle_size 는 64KB입니다.

번들 크기 튜닝의 성능 향상은 환경에 따라 다르며 번들이 어셈블되는 동안 더 효율적인 네트워크 트래픽이 통신 지연에 대해 분산되는지에 따라 달라집니다.

프로세스

  • 다음 관리 CLI 명령을 사용하여 max_bundle_size 를 구성합니다.

    /subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT_TYPE/property=max_bundle_size:add(value=BUNDLE_SIZE)
    Copy to Clipboard Toggle word wrap

    예를 들어 기본 udp 스택의 max_bundle_size 를 60K로 설정하려면 다음을 수행합니다.

    /subsystem=jgroups/stack=udp/transport=UDP/property=max_bundle_size:add(value=60K)
    Copy to Clipboard Toggle word wrap

11.4. Cryostat 스레드 풀

jgroups 하위 시스템은 클러스터 통신을 처리하기 위해 자체 스레드 풀을 사용합니다. Cryostat에는 개별적으로 구성할 수 있는 기본,내부,oob타이머 함수를 위한 스레드 풀이 포함되어 있습니다. 각 Cryostat 스레드 풀에는 keepalive-time,max-threads,min-threads, queue-length 에 대한 구성 가능한 속성이 포함되어 있습니다.

각 스레드 풀 속성에 대한 적절한 값은 환경에 따라 다르지만 대부분의 경우 기본값으로 충분합니다.

11.5. Cryostat 버퍼 전송 및 수신

jgroups 하위 시스템에는 UDP 및 TCP 스택 모두에 대해 구성 가능한 전송 및 수신 버퍼가 있습니다.

Cryostat 버퍼의 적절한 값은 환경에 따라 다르지만 대부분의 경우 기본값으로 충분합니다. 개발 환경에서 로드된 상태에서 클러스터를 테스트하여 버퍼 크기에 적합한 값을 조정하는 것이 좋습니다.

참고

운영 체제는 사용 가능한 버퍼 크기를 제한할 수 있으며 JBoss EAP는 구성된 버퍼 값을 사용하지 못할 수 있습니다.

12장. 트랜잭션 하위 시스템 튜닝

환경에서 분산된 트랜잭션을 사용하는 경우 성능 향상을 위해 트랜잭션 관리자의 로그 저장소를 조정할 수 있습니다.

기본 트랜잭션 로그 저장소는 간단한 파일 저장소를 사용합니다. XA 트랜잭션의 경우 이러한 유형의 로그 저장소는 각 트랜잭션 로그에 대해 하나의 시스템 파일을 생성하므로 비효율적일 수 있습니다. 특히 XA 트랜잭션의 경우 저널 저장소는 모든 트랜잭션에 대해 하나의 파일로 구성된 저널을 사용하므로 훨씬 더 효율적입니다.

XA 트랜잭션 성능이 향상되려면 저널 로그 저장소를 사용하는 것이 좋습니다. Red Hat Enterprise Linux 시스템의 경우 저널 저장소에서 비동기 I/O(AIO)를 추가로 활성화하여 성능을 추가로 향상시킬 수 있습니다.

참고

Red Hat Enterprise Linux 시스템의 경우 저널 저장소에서 비동기 I/O(AIO)를 활성화하는 경우 libaio 패키지가 설치되어 있는지 확인합니다.

12.1. 관리 콘솔을 사용하여 저널 로그 저장소 활성화

관리 콘솔을 사용하여 저널 로그 저장소를 활성화할 수 있습니다.

프로세스

  1. Configuration → Cryostats TransactionView 로 이동합니다.
  2. 구성 탭에서 편집 을 클릭합니다.
  3. Use Journal Store 필드를 ON 으로 설정합니다.
  4. 선택 사항: Red Hat Enterprise Linux 시스템의 경우 Journal Store Enable Async IO 필드를 ON 으로 설정합니다.
  5. 저장을 클릭합니다.

12.2. 관리 CLI를 사용하여 저널 로그 저장소 활성화

관리 CLI를 사용하여 저널 로그 저장소를 활성화할 수 있습니다.

프로세스

  1. 관리 CLI를 사용하여 저널 로그 저장소를 활성화하려면 다음 명령을 사용합니다.

    /subsystem=transactions:write-attribute(name=use-journal-store,value=true)
    Copy to Clipboard Toggle word wrap
  2. 선택 사항: Red Hat Enterprise Linux 시스템의 경우 다음 명령을 사용하여 저널 로그 저장소 비동기 I/O를 활성화합니다.

    /subsystem=transactions:write-attribute(name=journal-store-enable-async-io, value=true)
    Copy to Clipboard Toggle word wrap

부록 A. 참조 자료

A.1. 데이터 소스 통계

Expand
표 A.1. 코어 풀 통계
이름설명

ActiveCount

활성 연결 수입니다. 각 연결은 애플리케이션에서 사용 중이거나 풀에서 사용할 수 있습니다.

AvailableCount

풀에서 사용 가능한 연결 수입니다.

AverageBlockingTime

풀에서 독점 잠금을 얻는 데 걸리는 평균 시간입니다. 이 값은 밀리초 단위입니다.

AverageCreationTime

연결을 만드는 데 걸리는 평균 시간입니다. 이 값은 밀리초 단위입니다.

AverageGetTime

연결을 얻는 데 걸리는 평균 시간입니다.

AveragePoolTime

연결에서 사용한 평균 시간입니다.

AverageUsageTime

연결을 사용하여 보낸 평균 시간입니다.

BlockingFailureCount

연결을 시도한 실패 수입니다.

CreatedCount

생성된 연결 수입니다.

DestroyedCount

삭제된 연결 수입니다.

IdleCount

현재 유휴 상태인 연결 수입니다.

InUseCount

현재 사용 중인 연결 수입니다.

MaxCreationTime

연결을 만드는 데 걸리는 최대 시간입니다. 이 값은 밀리초 단위입니다.

MaxGetTime

연결을 얻는 최대 시간입니다.

MaxPoolTime

풀에 있는 연결의 최대 시간입니다.

MaxUsageTime

연결을 사용하는 최대 시간입니다.

MaxUsedCount

사용된 최대 연결 수입니다.

MaxWaitCount

동시에 연결을 기다리는 최대 요청 수입니다.

MaxWaitTime

풀에서 독점 잠금을 기다리는 데 걸리는 최대 시간입니다.

TimedOut

시간 초과된 연결 수입니다.

TotalBlockingTime

풀에서 독점 잠금을 기다리는 총 시간입니다. 이 값은 밀리초 단위입니다.

TotalCreationTime

연결을 만드는 데 소요된 총 시간입니다. 이 값은 밀리초 단위입니다.

TotalGetTime

연결을 얻는 데 걸리는 총 시간입니다.

TotalPoolTime

풀에서 연결에서 사용하는 총 시간입니다.

TotalUsageTime

연결을 사용하여 사용하는 총 시간입니다.

WaitCount

연결을 얻기 위해 기다려야 하는 요청 수입니다.

XACommitAverageTime

XAResource 커밋 호출의 평균 시간입니다.

XACommitCount

XAResource 커밋 호출 수입니다.

XACommitMaxTime

XAResource 커밋 호출의 최대 시간입니다.

XACommitTotalTime

모든 XAResource 커밋 호출의 총 시간입니다.

XAEndAverageTime

XAResource 종료 호출의 평균 시간입니다.

XAEndCount

XAResource 종료 호출 수입니다.

XAEndMaxTime

XAResource 엔드 호출의 최대 시간입니다.

XAEndTotalTime

모든 XAResource 종료 호출의 총 시간입니다.

XAForgetAverageTime

XAResource의 평균 시간은 호출을 잊어 버립니다.

XAForgetCount

XAResource에서 호출 수를 잊어버렸습니다.

XAForgetMaxTime

XAResource가 호출을 잊어버린 최대 시간입니다.

XAForgetTotalTime

모든 XAResource의 총 시간은 호출을 잊어 버립니다.

XAPrepareAverageTime

XAResource 준비 호출의 평균 시간입니다.

XAPrepareCount

XAResource 준비 호출 수입니다.

XAPrepareMaxTime

XAResource 준비 호출의 최대 시간입니다.

XAPrepareTotalTime

모든 XAResource 준비 호출의 총 시간입니다.

XARecoverAverageTime

XAResource가 호출을 복구하는 평균 시간입니다.

XARecoverCount

XAResource의 수는 호출을 복구합니다.

XARecoverMaxTime

XAResource가 호출을 복구하는 최대 시간입니다.

XARecoverTotalTime

모든 XAResource의 총 시간은 호출을 복구합니다.

XARollbackAverageTime

XAResource 롤백 호출의 평균 시간입니다.

XARollbackCount

XAResource 롤백 호출 수입니다.

XARollbackMaxTime

XAResource 롤백 호출의 최대 시간입니다.

XARollbackTotalTime

모든 XAResource 롤백 호출의 총 시간입니다.

XAStartAverageTime

XAResource 시작 호출의 평균 시간입니다.

XAStartCount

XAResource 시작 호출 수입니다.

XAStartMaxTime

XAResource 시작 호출의 최대 시간입니다.

XAStartTotalTime

모든 XAResource 시작 호출의 총 시간입니다.

Expand
표 A.2. JDBC 통계
이름설명

PreparedStatementCacheAccessCount

문 캐시에 액세스한 횟수입니다.

PreparedStatementCacheAddCount

문 캐시에 추가된 문 수입니다.

PreparedStatementCacheCurrentSize

문 캐시에 현재 캐시된 준비 및 호출 가능 문의 수입니다.

PreparedStatementCacheDeleteCount

캐시에서 삭제되는 문 수입니다.

PreparedStatementCacheHitCount

캐시의 구문이 사용된 횟수입니다.

PreparedStatementCacheMissCount

문 요청이 캐시의 문에 충족할 수 없는 횟수입니다.

A.2. 리소스 어댑터 통계

Expand
표 A.3. 리소스 어댑터 통계
이름설명

ActiveCount

활성 연결 수입니다. 각 연결은 애플리케이션에서 사용 중이거나 풀에서 사용할 수 있습니다.

AvailableCount

풀에서 사용 가능한 연결 수입니다.

AverageBlockingTime

풀에서 독점 잠금을 얻는 데 걸리는 평균 시간입니다. 값은 밀리초 단위입니다.

AverageCreationTime

연결을 만드는 데 걸리는 평균 시간입니다. 값은 밀리초 단위입니다.

CreatedCount

생성된 연결 수입니다.

DestroyedCount

삭제된 연결 수입니다.

InUseCount

현재 사용 중인 연결 수입니다.

MaxCreationTime

연결을 만드는 데 걸리는 최대 시간입니다. 값은 밀리초 단위입니다.

MaxUsedCount

사용된 최대 연결 수입니다.

MaxWaitCount

동시에 연결을 기다리는 최대 요청 수입니다.

MaxWaitTime

풀에서 독점 잠금을 기다리는 데 걸리는 최대 시간입니다.

TimedOut

시간 초과된 연결 수입니다.

TotalBlockingTime

풀에서 독점 잠금을 기다리는 총 시간입니다. 값은 밀리초 단위입니다.

TotalCreationTime

연결을 만드는 데 소요된 총 시간입니다. 값은 밀리초 단위입니다.

WaitCount

연결을 기다려야 하는 요청 수입니다.

A.3. IO 하위 시스템 속성

참고

이러한 테이블의 특성 이름은 관리 모델에 표시되는 대로 나열됩니다(예: 관리 CLI 사용). 관리 모델의 차이가 있을 수 있으므로 EAP_HOME/docs/schema/wildfly-io_2_0.xsd 에 있는 스키마 정의 파일을 참조하십시오.

Expand
표 A.4. 작업자 속성
속성Default설명

io-threads

 

작업자에 대해 생성할 I/O 스레드 수입니다. 지정하지 않으면 스레드 수가 CPU 수 × 2로 설정됩니다.

stack-size

0

작업자 스레드에 사용할 스택 크기(바이트)입니다.

task-keepalive

60000

코어가 아닌 작업 스레드를 활성 상태로 유지하는 시간(밀리초)입니다.

task-core-threads

2

코어 작업 스레드 풀의 스레드 수입니다.

task-max-threads

 

작업자 작업 스레드 풀의 최대 스레드 수입니다. 지정하지 않는 경우 최대 스레드 수는 CPU 수 × 16으로 설정되어 MaxFileDescriptorCount 의 속성을 고려합니다(설정된 경우).

Expand
표 A.5. buffer-pool 속성
속성Default설명

buffer-size

 

각 버퍼 슬라이스의 크기(바이트)입니다. 지정하지 않으면 시스템의 사용 가능한 RAM에 따라 크기가 설정됩니다.

  • 64MB 미만의 RAM용 512바이트
  • 64MB - 128MB RAM의 경우 1024바이트(1KB)
  • 128MB 이상의 RAM의 경우 16384바이트(16KB)

buffers-per-slice

 

더 큰 버퍼를 분할하는 슬라이스 또는 섹션 수입니다. 이는 여러 개의 개별 버퍼를 할당하는 것보다 더 메모리 효율적일 수 있습니다. 지정하지 않으면 시스템의 사용 가능한 RAM에 따라 슬라이스 수가 설정됩니다. * 10은 128MB 이상의 RAM에 대해 * 128MB 미만의 RAM * 20입니다.

direct-buffers

 

버퍼 풀에서 직접 버퍼를 사용하는지 여부에 관계없이 NIO의 경우 더 빠릅니다. 일부 플랫폼은 직접 버퍼를 지원하지 않습니다.

참고

IO 버퍼 풀은 JBoss EAP 7.2부터 더 이상 사용되지 않습니다. 현재 릴리스에서 여전히 기본값으로 설정되지만 향후 릴리스에서는 이 버퍼 풀은 Cryostat 바이트 버퍼 풀로 교체됩니다.





2024-02-08에 최종 업데이트된 문서

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동