성능 튜닝 가이드

Red Hat JBoss Enterprise Application Platform 7.4

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. 문서 URL, 섹션 번호 를 포함하고 문제를 설명하십시오.
  3. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  4. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  5. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. 성능 튜닝 소개

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

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

You should stress test and verify all performance configuration changes under anticipated conditions in a development or testing environment prior to deploying them to production.

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

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

  • JBoss EAP 압축 파일을 설치한 경우 설치 디렉터리는 압축된 아카이브를 추출한 jboss-eap-7.4 디렉터리입니다.
  • RPM 설치 방법을 사용하여 JBoss EAP를 설치한 경우 설치 디렉토리는 /opt/rh/eap7/root/usr/share/wildfly/ 입니다.
  • 설치 프로그램을 사용하여 JBoss EAP를 설치한 경우 EAP_HOME 의 기본 경로는 ${user.home}/EAP-7.4.0 입니다.

    • Red Hat Enterprise Linux 및 Solaris의 경우: /home/USER_NAME/EAP-7.4.0/
    • Microsoft Windows의 경우: C:\Users\USER_NAME\EAP-7.4.0\
  • Red Hat CodeReady Studio 설치 프로그램을 사용하여 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 and Settings\USER_NAME\devstudio\runtimes\jboss-eap\
참고

Red Hat CodeReady Studio에서 Target 런타임7.4 또는 이후 런타임 버전으로 설정하면 프로젝트가 Jakarta EE 8 사양과 호환됩니다.

참고

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

2장. 성능 모니터링

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

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

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

독립 실행형 서버

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

    $ EAP_HOME/bin/standalone.sh -bmanagement=IP_ADDRESS
    주의

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

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

    service:jmx:remote+http://IP_ADDRESS:9990

관리형 도메인 호스트의 경우

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

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

  1. 원격 모니터링을 위해 JBoss EAP 서버에 연결하는 데 사용할 ApplicationRealm 에서 새 사용자를 만듭니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.
  2. Elytron를 사용하도록 리모 하위 시스템을 구성하려면 다음 명령을 실행합니다.

    /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)
  3. JBoss EAP 관리형 도메인 호스트를 시작할 때 다음 인터페이스 중 하나 또는 둘 다를 모니터링에 사용할 IP 주소에 바인딩합니다.

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

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

      $ EAP_HOME/bin/domain.sh -bmanagement=IP_ADDRESS
      주의

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

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

    • 관리형 도메인 호스트에서 실행 중인 개별 JBoss EAP 서버 JVM에 연결하려면 이전에 만든 your ApplicationRealm 사용자 이름과 암호로 다음 URI를 사용합니다.

      service:jmx:remote://IP_ADDRESS:4447

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

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

      service:jmx:remote://IP_ADDRESS:9990

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 로컬 독립 실행형 JBoss EAP 서버 JVM

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

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

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

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

사전 요구 사항

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

    사용할 URI에 대한 원격 모니터링 연결을 위해 JBoss EAP를 구성하는 방법에 대한 지침을 참조하십시오.

    그림 2.3. JConsole 원격 JBoss EAP JVM

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

2.3. Java VisualVM

Java VisualVM은 Oracle JDK에 포함되어 있으며 JAVA_HOME/bin/jvisualvm 에 있습니다. Oracle JDK를 사용하지 않는 경우 VisualVM 웹 사이트에서 VisualVM 을 다운로드할 수도 있습니다. VisualVM은 IBM JDK에서 작동하지 않습니다.

다음 섹션에서는 VisualVM을 사용하여 로컬 또는 원격 JBoss EAP JVM에 연결하는 방법을 설명합니다. VisualVM 사용에 대한 자세한 내용은 VisualVM 설명서 를 참조하십시오.

2.3.1. VisualVM을 사용하여 로컬 JBoss EAP JVM에 연결

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

  1. VisualVM을 열고 VisualVM 창의 왼쪽에 있는 Applications(애플리케이션 ) 창을 찾습니다.
  2. 로컬에서 모니터링할 JBoss EAP JVM 프로세스를 두 번 클릭합니다.

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

      그림 2.4. VisualVM Local Standalone JBoss EAP Server JVM

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

      그림 2.5. VisualVM 로컬 관리형 도메인 JBoss EAP JVM

      VisualVM 로컬 도메인

2.3.2. VisualVM을 사용하여 원격 JBoss EAP JVM에 연결

사전 요구 사항

  1. JBoss EAP JVM을 원격으로 모니터링하려면 클래스 경로에 필수 JBoss EAP 라이브러리를 추가해야 합니다. 로컬 시스템에 필요한 라이브러리에 대한 인수를 사용하여 VisualVM을 시작합니다. 예를 들면 다음과 같습니다.

    $ visualvm -cp:a EAP_HOME/bin/client/jboss-cli-client.jar  -J-Dmodule.path=EAP_HOME/modules
  2. File(파일 ) 메뉴에서 Add JMX Connection (JMX 연결 추가)을 선택합니다.
  3. 원격 JBoss EAP JVM에 대한 세부 정보를 완료합니다.

    • Connection(연결 ) 필드에 모니터링할 원격 JBoss EAP JVM 프로세스의 URI를 삽입합니다. 사용할 URI에 대한 원격 모니터링 연결을 위해 JBoss EAP를 구성하는 방법에 대한 지침을 참조하십시오.
    • Use security credentials (보안 자격 증명 사용) 확인란을 선택하고 모니터링 연결에 사용자 이름과 암호를 입력합니다.
    • SSL 연결을 사용하지 않는 경우 Do not require SSL connection (SSL 연결 필요 없음) 확인란을 선택합니다.

    그림 2.6. VisualVM Remote JBoss EAP JVM

    visualvm remote
  4. OK(확인)를 클릭합니다.
  5. VisualVM 창의 왼쪽에 있는 Applications(애플리케이션 ) 창에서 원격 호스트 아래의 JMX 항목을 두 번 클릭하여 모니터링 연결을 엽니다.

3장. 성능 문제 진단

3.1. Garbage 컬렉션 로깅 활성화

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

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

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

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

    • OpenJDK 8 또는 Oracle JDK 8의 경우:

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

      -Xlog:gc*:file=<path_to_directory>/gc.log:time,uptimemillis:filecount=5,filesize=3M
    • IBM JDK의 경우:

      -Xverbosegclog:<path_to_directory>/gc.log
  2. 가비지 컬렉션 JVM 옵션을 JBoss EAP 서버에 적용합니다.

    관리형 도메인의 독립 실행형 서버 또는 서버에 JVM 옵션을 적용하는 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

추가 리소스

3.2. Java 힙 덤프

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

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

3.2.1. 힙 덤프 생성

3.2.1.1. OpenJDK 및 Oracle JDK

온 디맨드 힙 덤프 만들기

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

  1. 힙 덤프를 생성하려는 JVM의 프로세스 ID를 확인합니다.
  2. 다음 명령을 사용하여 힙 덤프를 생성합니다.

    $ jcmd JAVA_PID GC.heap_dump -all=true FILENAME.hprof

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

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

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

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

관리형 도메인의 독립 실행형 서버 또는 서버에 JVM 옵션을 적용하는 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

3.2.1.2. IBM JDK

IBM JDK를 사용하면 OutOfMemoryError 가 throw될 때 힙 덤프가 자동으로 생성됩니다.

IBM JDK의 힙 덤프는 이식 가능한 힙 덤프(PHD) 포맷 파일로 /tmp/ 디렉터리에 저장됩니다.

3.2.2. 힙 덤프 분석

힙 덤프 분석 툴

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

Eclipse MAT 사용에 대한 자세한 내용은 Eclipse MAT 문서를 참조하십시오.

heap Dump 분석 팁

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

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

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

메모리 문제의 소스가 식별되면 가비지 컬렉션 루트의 경로를 확인하여 오브젝트를 활성 상태로 유지하는 방법을 확인할 수 있습니다.

3.3. Java 스레드로 높은 CPU 사용률 확인

참고

Red Hat Enterprise Linux 또는 Solaris에서 JBoss EAP를 사용하는 고객의 경우 Red Hat 고객 포털의 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

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

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

3.4. 관리되는 실행자 서비스 및 관리된 예약된 실행자 서비스에 대한 런타임 통계

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

중요

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

표 3.1. 관리 실행자 서비스 및 관리되는 예약 실행자 서비스의 성능을 모니터링하기 위한 관리 CLI 속성을 표시합니다.

속성설명

active-thread-count

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

completed-task-count

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

hung-thread-count

중단된 실행자 스레드 수입니다.

max-thread-count

최대 실행자 스레드 수입니다.

current-queue-size

실행자 작업 대기열의 현재 크기입니다.

task-count

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

thread-count

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

독립 실행형 서버에서 실행 중인 관리 실행자 서비스에 대한 런타임 통계를 보는 예.

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

독립 실행형 서버에서 실행 중인 관리 예약된 executor 서비스에 대한 런타임 통계의 예.

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

호스트에 매핑된 서버에서 실행 중인 관리 실행자 서비스에 대한 런타임 통계를 보는 예.

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

호스트에 매핑된 서버에서 실행 중인 관리 예약 실행자 서비스에 대한 런타임 통계의 예.

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

추가 리소스

  • 관리형 실행자 서비스 생성에 대한 자세한 내용은 JBoss EAP 개발 가이드에서 Managed Executor Service 를 참조하십시오.
  • 관리형 예약 실행자 서비스 생성에 대한 자세한 내용은 JBoss EAP 개발 가이드에서 Managed Scheduled Executor Service 를 참조하십시오.

4장. JVM 튜닝

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

참고

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

4.1. 고정된 힙 크기 설정

프로덕션 환경에서 힙 크기를 사전 할당하고 수정하려면 초기 및 최대 힙 크기 옵션을 동일한 크기로 설정해야 합니다.

절차

  1. 메모리 오류가 발생하지 않도록 적절한 힙 크기를 설정합니다.

    1. -Xms 옵션을 사용하여 초기 힙 크기를 설정하고 -Xmx 를 사용하여 최대 힙 크기를 설정합니다.

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

    -Xms2048M -Xmx2048M
  2. 개발 환경의 부하에서 애플리케이션을 테스트하여 최대 메모리 사용량을 확인합니다.

프로덕션 힙 크기는 오버헤드의 공간을 허용하기 위해 테스트된 최대값보다 최소 25% 이상이어야 합니다.

4.2. Garbage 수집기 구성

처리량 가비지 컬렉터라고도 하는 병렬 가비지 컬렉터는 서버 클래스 머신의 Java 8의 기본 가비지 컬렉터 이지만, Red Hat은 G1 가비지 컬렉터를 사용하는 것이 좋습니다. 이 가비지 컬렉터는 Java 9 이후의 기본값일 것으로 예상됩니다. G1 가비지 컬렉터는 일반적으로 대부분의 시나리오에서 CMS 및 병렬 가비지 컬렉터보다 더 나은 성능을 제공합니다.

절차

  1. G1 수집기를 활성화하려면 다음 JVM 옵션을 사용합니다.

    -XX:+UseG1GC
가비지 컬렉션 로깅 옵션

가비지 컬렉션 로깅은 독립 실행형 JBoss EAP 서버에 대해 기본적으로 활성화됩니다. JBoss EAP 관리형 도메인에 대한 가비지 수집 로깅을 활성화하려면 가비지 수집 활성화를 참조하십시오.

4.3. 대규모 페이지 활성화

JBoss EAP JVM에 대해 대규모 페이지를 활성화하면 메모리에 잠긴 페이지가 있고 일반 메모리와 같이 디스크로 교체할 수 없습니다.

특히 메모리를 많이 사용하는 애플리케이션의 경우 대규모 페이지를 사용할 경우 힙을 호출하거나 디스크에 스왑할 수 없으므로 항상 쉽게 사용할 수 있습니다.

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

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

사전 요구 사항

  • 운영 체제 구성이 대규모 페이지를 사용하도록 설정되어 있습니다.

절차

  1. 운영 체제가 JBoss EAP 프로세스에 대규모 페이지를 사용하도록 구성되지 않은 경우 다음 옵션 중 하나를 선택합니다.

    • Red Hat Enterprise Linux 시스템의 경우 JBoss EAP 프로세스가 대규모 페이지에 액세스할 수 있도록 명시적으로 HugeTLB 페이지를 구성해야 합니다.

      Red Hat Enterprise Linux 메모리 옵션 구성에 대한 자세한 내용은 Red Hat Enterprise Linux 성능 튜닝 가이드의 메모리 장을 참조하십시오.

    • JBoss EAP를 실행하는 Windows Server 시스템의 경우 대규모 페이지 권한을 할당해야 합니다.

      1. 컨트롤 패널관리 도구로컬 보안 정책을 선택합니다.
      2. 로컬 정책사용자 권한 할당을 선택합니다.
      3. 메모리에서 Lock pages를 두 번 클릭합니다.
      4. 대규모 페이지를 사용할 Windows Server 사용자 및 사용자 그룹을 추가합니다.
      5. 시스템을 다시 시작합니다.
  2. 대규모 페이지 지원을 활성화하거나 비활성화합니다.

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

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

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

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

      OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory. (error = 1)
    • 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.

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

추가 리소스

4.4. 적극적인 최적화 활성화

공격적 최적화(AggressiveOpts) JVM 옵션을 사용하면 환경에 대한 성능이 향상될 수 있습니다. 이 옵션은 향후 Java 릴리스에서 기본값으로 예상되는 Java 성능 최적화 기능을 제공합니다.

절차

  1. AggressiveOpts를 활성화하려면 다음 JVM 옵션을 사용합니다.

    -XX:+AggressiveOpts

4.5. 소프트 및 하드 ulimit 설정

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

중요

IBM JDK를 사용하는 경우 IBM JDK는 JVM 프로세스에서 사용하는 최대 열린 파일 수에 대해 소프트 제한을 사용하는 것이 중요합니다. Red Hat Enterprise Linux에서는 IBM JDK를 사용하는 JBoss EAP 프로세스의 기본 소프트 제한(1024)이 너무 낮은 것으로 간주됩니다.

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.

절차

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

    • 소프트 ulimit 값의 경우:

      ulimit -Sa
    • 하드 ulimit 값의 경우:

      ulimit -Ha
  2. 열려 있는 파일의 최대 개수에 대해 ulimit 를 설정하려면 적용하려는 번호와 함께 다음 명령을 사용합니다.

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

      ulimit -Sn 4096
    • 열려 있는 최대 파일 수의 하드 ulimit 를 설정하려면 다음을 수행합니다.

      ulimit -Hn 4096
      참고

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

추가 리소스

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

JBoss EAP 관리형 도메인 호스트에는 호스트 컨트롤러와 프로세스 컨트롤러를 위한 별도의 JVM이 있습니다. 호스트 컨트롤러 및 프로세스 컨트롤러 의 역할에 대한 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

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

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

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

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

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

JBoss EAP에는 빈 인스턴스 풀과 빈 스레드 풀이라는 두 개의 다양한 빈 풀이 있습니다.

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

5.1. 빈 인스턴스 풀

빈 인스턴스 풀은 SLSB(상태 비저장 세션 빈) 및 MDB(Message Driven Beans)에 사용됩니다. 기본적으로 SLSB는 인스턴스 풀 default-slsb-instance-pool 을 사용하며 MDB는 인스턴스 풀 default-mdb-instance-pool 을 사용합니다.

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

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

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

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

참고

derive -size 특성은 max- pool-size 에 지정된 값을 재정의합니다.max- pool-size 값을 적용하려면 derive-size 를 정의하지 않아야 합니다.

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

5.1.1. 빈 인스턴스 풀 생성

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

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

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

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(derive-size=DERIVE_OPTION,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)

    다음 예제에서는 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)
  • 명시적인 최대 풀 크기가 있는 빈 인스턴스 풀을 생성하려면 다음을 수행합니다.

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(max-pool-size=POOL_SIZE,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)

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

    /subsystem=ejb3/strict-max-bean-instance-pool=my_pool:add(max-pool-size=30,timeout-unit=SECONDS,timeout=30)

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

@org.jboss.ejb3.annotation.Pool 주석을 사용하거나 빈의 jboss-ejb3. xml 배포 설명자를 수정하여 특정 빈에서 사용할 특정 인스턴스 풀을 설정할 수 있습니다. 자세한 내용은 Developing Jakarta Enterprise Beans Applicationsjboss-ejb3.xml Deployment Descriptor 참조를 참조하십시오.

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

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

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

/subsystem=ejb3:undefine-attribute(name=default-slsb-instance-pool)
참고

빈이 특정 빈 인스턴스 풀을 사용하도록 구성된 경우 기본 인스턴스 풀을 비활성화해도 빈에서 사용하는 풀에는 영향을 미치지 않습니다.

5.2. 빈 스레드 풀

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

참고

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

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

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

5.2.1. 빈 스레드 풀 생성

이 섹션에서는 관리 CLI를 사용하여 새 빈 스레드 풀을 생성하는 방법을 보여줍니다. 또한 Configuration (구성) 탭에서 Jakarta Enterprise Beans 하위 시스템으로 이동하고 왼쪽 메뉴에서 ContainerThread Pool 을 선택하여 관리 콘솔을 사용하여 빈 스레드 풀을 구성할 수도 있습니다.

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

/subsystem=ejb3/thread-pool=POOL_NAME:add(max-threads=MAX_THREADS)

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

/subsystem=ejb3/thread-pool=my_thread_pool:add(max-threads=30)

5.2.2. 특정 빈 스레드 풀을 사용하도록 엔터프라이즈 빈 서비스 구성

enterprise bean 비동기 호출 서비스 및 타이머 서비스는 각각 특정 빈 스레드 풀을 사용하도록 구성할 수 있습니다. 기본적으로 두 서비스 모두 기본 빈 스레드 풀을 사용합니다.

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

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

/subsystem=ejb3/service=SERVICE_NAME:write-attribute(name=thread-pool-name,value=THREAD_POOL_NAME)

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

  • 엔터프라이즈 빈 비동기 호출 서비스용 비동기식 비동기 호출 Async
  • 엔터프라이즈 빈 타이머 서비스를 위한 타이머 서비스

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

/subsystem=ejb3/service=async:write-attribute(name=thread-pool-name,value=my_thread_pool)

5.3. 런타임 빈 배포 정보

빈 배포에서 런타임 메타데이터를 사용할 수 있으므로 빈의 성능을 모니터링할 수 있습니다.

런타임 메타데이터는 다음 유형의 빈에 사용할 수 있습니다.

  • 상태 저장 세션 빈
  • 상태 비저장 세션 빈
  • Singleton 빈
  • 메시지 중심 빈

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

추가 리소스

5.3.1. Jakarta Enterprisehieras에서 런타임 데이터를 검색하기 위한 명령줄 옵션

Jakarta Enterprisehieras의 런타임 데이터는 관리 CLI에서 제공되므로 Jakarta Enterprisehieras의 성능을 평가할 수 있습니다.

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

/deployment=<deployment_name>/subsystem=ejb3/<bean_type>=<bean_name>:read-resource(include-runtime)

<deployment_name> 을 런타임 데이터를 검색할 배포 .jar 파일의 이름으로 바꿉니다. <bean_type> 을 런타임 데이터를 검색할 빈 유형으로 바꿉니다. 이 자리 표시자에 대해 유효한 옵션은 다음과 같습니다.

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

<bean_name> 을 런타임 데이터를 검색할 빈 이름으로 바꿉니다.

이 시스템은 JSON(JavaScript Object Notation) 데이터로 stdout 형식으로 결과를 제공합니다.

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

/deployment=ejb-management.jar/subsystem=ejb3/singleton-bean=ManagedSingletonBean:read-resource(include-runtime)

Singleton 빈의 출력 런타임 데이터 예

{
    "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}
    }
}

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

/deployment=ejb-management.jar/subsystem=ejb3/message-driven-bean=NoTimerMDB:read-resource(include-runtime)

메시지 기반 빈의 출력 예

{
    "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
    }
}

5.4. 엔터프라이즈 빈 하위 시스템 튜닝이 필요할 수 있는 예외

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

    javax.ejb.EJBException: JBAS014516: Failed to acquire a permit within 20 SECONDS
         at org.jboss.as.ejb3.pool.strictmax.StrictMaxPool.get(StrictMaxPool.java:109)

    빈 인스턴스 풀을 참조하십시오.

  • 엔터프라이즈 빈 스레드 풀은 충분히 크지 않거나, 엔터프라이즈 빈은 호출 시간 초과보다 처리 시간이 오래 걸립니다.

    java.util.concurrent.TimeoutException: No invocation response received in 300000 milliseconds

    빈 스레드 풀을 참조하십시오.

5.5. SFSB의 기본 전역 시간 제한 값

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

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

  • 특성에 대한 현재 전역 시간 제한 값을 확인하는 관리 CLI에서 read-attribute 작업을 수행합니다.
  • 관리 CLI를 사용하여 속성을 구성하는 write-attribute 작업입니다.

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

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

특성의 전역 시간 제한 값을 변경하는 경우 업데이트된 설정은 새 배포에만 적용됩니다. 새 설정을 현재 배포에 적용하려면 서버를 다시 로드해야 합니다.

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

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

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

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

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

추가 리소스

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

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

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

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

6.1. 풀 통계 모니터링

6.1.1. 데이터 소스 통계

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

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

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

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

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

참고

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

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=statistics-enabled,value=true)

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

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

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

  1. 독립 실행형 또는 도메인 모드에서 데이터 소스로 이동합니다.

    • 독립 실행형 모드에서 다음 탐색을 사용합니다.

      구성 → Cryo stat데이터 소스 및 드라이버데이터 소스

    • 도메인 모드에서 다음 탐색을 사용합니다.

      구성프로필전체데이터 소스 및 드라이버데이터 소스

  2. 데이터 소스를 선택하고 View(보기 )를 클릭합니다.
  3. Attributes (특성) 탭에서 Edit (편집)를 클릭합니다.
  4. Statistics Enabled(통계 활성화됨) 필드를 ON (켜짐)으로 설정하고 Save(저장 )를 클릭합니다. 변경 사항을 적용하려면 변경 사항을 다시 로드해야 함을 나타내는 팝업이 표시됩니다.
  5. 서버를 다시 로드합니다.

    • 독립 실행형 서버의 경우 팝업에서 Reload (다시 로드) 링크를 클릭하여 서버를 다시 로드합니다.
    • 관리형 도메인의 경우 팝업에서 Topology (토폴로지) 링크를 클릭합니다. Topology(토폴로지 ) 탭에서 적절한 서버를 선택하고 Reload (다시 로드) 드롭 다운 옵션을 선택하여 서버를 다시 로드합니다.

6.1.1.2. 데이터 소스 통계 보기

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

관리 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,
        ...
}

다음 관리 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
    }
}
참고

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

사용 가능한 모든 통계에 대한 자세한 목록은 데이터 소스 통계를 참조하십시오.

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

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

사용 가능한 모든 통계에 대한 자세한 목록은 데이터 소스 통계를 참조하십시오.

6.1.2. 리소스 어댑터 통계

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

리소스 어댑터 통계 활성화

기본적으로 리소스 어댑터 통계는 활성화되지 않습니다. 다음 관리 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)
리소스 어댑터 통계 보기

리소스 어댑터 통계는 관리 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"
    }
}
참고

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

6.2. 풀 특성

이 섹션에서는 최적의 데이터 소스 또는 리소스 어댑터 성능을 위해 구성할 수 있는 선택한 풀 속성에 대한 조언을 자세히 설명합니다. 이러한 각 특성을 구성하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

  • 데이터 소스 풀 속성 구성
  • 리소스 어댑터 풀 속성 구성

    최소 풀 크기

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

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

    비활성 기간이 진행되는 동안 연결 풀은 min-pool-size 값으로 줄어듭니다.

    최소 풀 크기를 애플리케이션에 적합한 온디맨드 처리량을 허용하는 연결 수로 설정하는 것이 좋습니다.

    최대 풀 크기

    max-pool-size 특성은 연결 풀의 최대 크기를 정의합니다. 활성 연결 수를 제한하고 동시 활동의 양도 제한하기 때문에 중요한 성능 매개 변수입니다.

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

    로드 중인 성능을 모니터링 한 후 관찰 가능한 MaxUsedCount 보다 max-pool-size 를 최소 15%로 설정하는 것이 좋습니다. 이렇게 하면 일부 버퍼에서 예상 조건보다 많은 버퍼를 사용할 수 있습니다.

    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. 데이터 소스 풀 속성 구성

사전 요구 사항

  • JDBC 드라이버를 설치합니다. JBoss EAP 구성 가이드 의 JDBC 드라이버를 참조하십시오.
  • 데이터 소스를 생성합니다. JBoss EAP 구성 가이드에서 데이터 소스 생성을 참조하십시오.

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

  • 관리 콘솔을 사용하려면 ConfigurationSubsystemsDatasources & Drivers → DatasourcesDatasources 로 이동하여 데이터 소스를 선택한 다음 View 를 클릭합니다. pool 옵션은 datasource Pool(데이터 소스 풀 ) 탭에서 구성할 수 있습니다. 시간 제한 옵션은 데이터 소스 Timeouts (데이터 소스 시간 제한) 탭에서 구성할 수 있습니다.
  • 관리 CLI를 사용하려면 다음 명령을 실행합니다.

    /subsystem=datasources/data-source=DATASOURCE_NAME/:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)

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

    /subsystem=datasources/data-source=ExampleDS/:write-attribute(name=min-pool-size,value=5)

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

사전 요구 사항

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

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

    /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER_NAME/connection-definitions=CONNECTION_DEFINITION_NAME:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)

    예를 들어 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)

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

messaging-activemq 하위 시스템에 대한 성능 튜닝 지침은 JBoss EAP 구성 메시징 가이드의 성능 튜닝 부분에서 설명합니다.

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

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

추가 리소스

  • 로깅 하위 시스템 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 로깅 장을 참조하십시오.

8.1. 콘솔에 대한 로깅 비활성화

콘솔 로깅을 비활성화하면 JBoss EAP 성능이 향상될 수 있습니다. 콘솔에 로그를 출력하는 것은 프로덕션 환경의 개발 및 테스트 환경에 유용할 수 있지만 대부분의 경우 필요하지 않습니다.

JBoss EAP 루트 로거에는 standalone -full-ha 를 제외한 모든 기본 독립 실행형 서버 프로필에 대한 콘솔 로그 핸들러가 포함되어 있습니다. 기본 관리형 도메인 프로필에는 콘솔 핸들러가 포함되지 않습니다.

절차

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

    /subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)

8.2. 로깅 수준 구성

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

추가 리소스

  • 다른 로깅 핸들러에 대한 로그 수준을 설정하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드 의 로그 핸들러 구성을 참조하십시오.

8.3. 로그 파일의 위치 구성

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

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

추가 리소스

  • 다른 로깅 핸들러에 대한 로그 파일 위치 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 로그 핸들러 구성을 참조하십시오.

9장. opm 하위 시스템 튜닝

JBoss EAP 7에 도입된NIO(Non-blocking I/O)Cinder 하위 시스템은 JBoss EAP 6의 이전 하위 시스템에 비해 성능이 크게 향상되었습니다. 사용자 환경에 맞는PROXY 하위 시스템을 튜닝할 수 있는 방법은 다음과 같습니다.

9.1. 버퍼 캐시 구성

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

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

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

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

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

추가 리소스

  • 관리 CLI를 사용하여 버퍼 캐시를 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드 의 버퍼 캐시 구성을 참조하십시오.

9.2. 바이트 버퍼 풀 구성

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

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

추가 리소스

9.3. Jakarta 서버 페이지 구성

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

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

9.3.1. 관리 콘솔을 사용하여 Jakarta Server Pages 옵션 활성화

관리 콘솔을 사용하여 fedora Jakarta 서버 페이지 구성 옵션을 활성화하려면 다음 단계를 완료합니다.

절차

  1. 구성하위 시스템웹(Undertow)서블릿 컨테이너로 이동합니다.
  2. 구성할 서블릿 컨테이너를 선택하고 View(보기 )를 클릭합니다.
  3. Jakarta Server Pages 를 선택하고 Edit(편집 )를 클릭합니다.
  4. 활성화할 각 옵션에 대해 필드를 ON 으로 설정한 다음 저장을 클릭합니다.

9.3.2. 관리 CLI를 사용하여 Jakarta Server Pages 옵션 활성화

관리 CLI를 사용하여 fedora Jakarta 서버 페이지 구성 옵션을 활성화하려면 다음 단계를 완료합니다.

절차

  • 다음 명령을 사용합니다.

    /subsystem=undertow/servlet-container=SERVLET_CONTAINER/setting=jsp/:write-attribute(name=OPTION_NAME,value=true)

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

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

9.4. 리스너 구성 옵션

애플리케이션 및 환경에 따라 특정 트래픽 유형(예: 특정 포트의 트래픽)에 고유한 다중 리스너를 구성한 다음 각 리스너에 대한 옵션을 구성할 수 있습니다.

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

max-connections
리스너에서 처리할 수 있는 최대 동시 연결 수입니다. 기본적으로 이 속성은 정의되지 않으므로 무제한 연결이 생성됩니다. 이 옵션을 사용하여 리스너에서 처리할 수 있는 연결 수에 대해 설정함으로써 리소스 사용량을 제한하는 데 유용할 수 있습니다. 이 값을 구성하면 워크로드 및 트래픽 유형을 고려해야 합니다. 아래의 no-request-timeout 도 참조하십시오.
no-request-timeout
연결이 닫히기 전에 연결이 유휴 상태인 시간(밀리초)입니다. 기본값은 60,000밀리초(1분)입니다. 연결 효율성을 최적화하도록 환경에서 이 옵션을 튜닝하면 네트워크 성능이 향상될 수 있습니다. 유휴 연결이 조기에 닫힌 경우 연결을 다시 설정하는 오버헤드가 있습니다. 유휴 연결이 너무 긴 경우 리소스를 불필요하게 사용합니다.
max-header-size
HTTP 요청 헤더의 최대 크기(바이트)입니다. 기본값은 1,048,576(1024KB)입니다. 헤더 크기 제한은 특정 유형의 서비스 거부 공격을 방지하는 데 유용할 수 있습니다.
buffer-pool
the io 하위 시스템에서 리스너에 사용할 버퍼 풀을 지정합니다. 기본적으로 모든 리스너는 기본 버퍼 풀을 사용합니다. 이 옵션을 사용하여 고유한 버퍼 풀을 사용하도록 각 리스너를 구성하거나 여러 리스너가 동일한 버퍼 풀을 사용하도록 설정할 수 있습니다.
worker
The undertow 하위 시스템은 the io 하위 시스템에서 XNIO 작업자를 제공합니다. 이 옵션은 리스너에서 사용하는 XNIO 작업자를 지정합니다. 기본적으로 리스너는 io 하위 시스템에서 기본 작업자를 사용합니다. 특정 유형의 네트워크 트래픽에 다른 작업자 리소스를 할당할 수 있도록 각 리스너가 특정 작업자를 사용하도록 구성하는 것이 유용할 수 있습니다.

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

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

절차

  1. 구성하위 시스템웹(Undertow) → 서버로 이동합니다.
  2. 구성할 서버를 선택하고 View(보기 )를 클릭합니다.
  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)

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

    /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-connections,value=100000)

10장. IO 하위 시스템 튜닝

The io 하위 시스템은 Undertow 및 Remoting과 같은 다른 JBoss EAP 하위 시스템에서 사용하는 XNIO 작업자 및 버퍼 풀을 정의합니다.

10.1. 작업자 구성

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

구성 가능한 작업자 속성 목록은 IO 하위 시스템 속성 부록 을 참조하십시오.

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

작업자를 생성하고 구성하는 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

10.1.1. 작업자 통계 모니터링

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

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

/subsystem=io/worker=default:read-resource(include-runtime=true,recursive=true)
참고

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

10.2. 버퍼 풀 구성

참고

IO 버퍼 풀은 더 이상 사용되지 않지만 현재 릴리스에서는 기본값으로 설정되어 있습니다. Undertow 바이트 버퍼 풀 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 바이트 버퍼 풀 구성 섹션을 참조하십시오.

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

구성 가능한 버퍼 풀 속성 목록은 IO 하위 시스템 속성 부록 을 참조하십시오.

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

버퍼 풀을 생성하고 구성하는 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

11장. JGroups 하위 시스템 튜닝

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

참고

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

이 장에서는 JGroups 클러스터 통신에서 사용할 JGroups 스택 전송 프로토콜(UDP 또는 TCP) 및 통신 프로토콜을 선택했다고 가정합니다. JGroups와의 클러스터 통신에 대한 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

11.1. JGroups 통계 모니터링

관리 CLI 또는 JMX를 통해 JBoss EAP 클러스터링을 모니터링하도록 jgroups 하위 시스템에 대한 통계를 활성화할 수 있습니다.

참고

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

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

    참고

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

    /subsystem=jgroups/channel=CHANNEL_NAME:write-attribute(name=statistics-enabled,value=true)

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

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

    reload
  3. 관리 CLI를 사용하거나 JVM 모니터링 툴과 함께 JMX를 통해 JGroups 통계를 확인할 수 있습니다.

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

      참고

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

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

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

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

        /subsystem=jgroups/channel=ee/protocol=FD_ALL:read-resource(include-runtime=true)
    • JVM 모니터링 툴을 사용하여 JBoss EAP에 연결하려면 성능 모니터링 장을 참조하십시오. JMX 연결을 통해 JGroups MBean에 대한 통계를 확인할 수 있습니다.

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

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

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

점보 프레임을 사용하려면 네트워크의 모든 NIC 및 스위치가 이를 지원해야 합니다. Red Hat Enterprise Linux의 점보 프레임 활성화에 대한 자세한 내용은 Red Hat 고객 포털을 참조하십시오.

11.3. 메시지 번들

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

이 번들은 특히 네트워크 통신에 더 많은 오버헤드가 있는 TCP 환경에서 통신 오버헤드를 줄입니다.

메시지 번들 구성

JGroups 메시지 번들은 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)

예를 들어 기본 udp 스택에 대해 max_bundle_size60K 로 설정하려면 다음을 실행합니다.

/subsystem=jgroups/stack=udp/transport=UDP/property=max_bundle_size:add(value=60K)

11.4. JGroups 스레드 풀

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

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

JGroups 스레드 풀 구성 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

11.5. JGroups 전송 및 버퍼 수신

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

JGroups 버퍼의 적절한 값은 환경에 따라 달라지지만 대부분의 경우 기본값으로 충분해야 합니다. 버퍼 크기에 적절한 값을 조정하려면 개발 환경에서 부하에서 클러스터를 테스트하는 것이 좋습니다.

참고

운영 체제는 사용 가능한 버퍼 크기를 제한할 수 있으며 JBoss EAP는 구성된 버퍼 값을 사용하지 못할 수 있습니다. JBoss EAP 구성 가이드에서 버퍼 크기 경고 해결을 참조하십시오.

JGroups 전송 및 수신 버퍼를 구성하는 방법에 대한 지침은 JBoss EAP 구성 가이드를 참조하십시오.

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

환경에서 XA 분산 트랜잭션을 사용하는 경우 트랜잭션 관리자의 로그 저장소를 튜닝하여 성능을 향상시킬 수 있습니다.

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

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

참고

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

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

  1. 구성하위 시스템트랜잭션 → 보기로 이동하여 보기를 클릭합니다.
  2. Configuration(구성 ) 탭에서 Edit(편집 )를 클릭합니다.
  3. Use Journal Store(사용 저널 저장소 ) 필드를 ON (켜짐)으로 설정합니다.
  4. 선택 사항: Red Hat Enterprise Linux 시스템의 경우 Journal Store Enable Async IO 필드를 ON 으로 설정합니다.
  5. 저장을 클릭합니다.

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

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

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

    /subsystem=transactions:write-attribute(name=journal-store-enable-async-io, value=true)

부록 A. 참고 자료

A.1. 데이터 소스 통계

표 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 prepare 호출 수입니다.

XAPrepareMaxTime

XAResource prepare 호출의 최대 시간입니다. 이 값은 밀리초 단위입니다.

XAPrepareTotalTime

모든 XAResource 준비 호출의 총 시간입니다. 이 값은 밀리초 단위입니다.

XARecoverAverageTime

XAResource 복구 호출의 평균 시간입니다. 이 값은 밀리초 단위입니다.

XARecoverCount

XAResource 복구 호출 수입니다.

XARecoverMaxTime

XAResource 복구 호출의 최대 시간입니다. 이 값은 밀리초 단위입니다.

XARecoverTotalTime

모든 XAResource의 총 시간은 호출을 복구합니다. 이 값은 밀리초 단위입니다.

XARollbackAverageTime

XAResource 롤백 호출의 평균 시간입니다. 이 값은 밀리초 단위입니다.

XARollbackCount

XAResource 롤백 호출 수입니다.

XARollbackMaxTime

XAResource 롤백 호출의 최대 시간입니다. 이 값은 밀리초 단위입니다.

XARollbackTotalTime

모든 XAResource 롤백 호출의 총 시간입니다. 이 값은 밀리초 단위입니다.

XAStartAverageTime

XAResource 시작 호출의 평균 시간입니다. 이 값은 밀리초 단위입니다.

XAStartCount

XAResource 시작 호출 수입니다.

XAStartMaxTime

XAResource start 호출의 최대 시간입니다. 이 값은 밀리초 단위입니다.

XAStartTotalTime

모든 XAResource start 호출의 총 시간입니다. 이 값은 밀리초 단위입니다.

표 A.2. JDBC 통계

이름설명

PreparedStatementCacheAccessCount

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

PreparedStatementCacheAddCount

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

PreparedStatementCacheCurrentSize

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

PreparedStatementCacheDeleteCount

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

PreparedStatementCacheHitCount

캐시에서 해당 문을 사용한 횟수입니다.

PreparedStatementCacheMissCount

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

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

표 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_3_0.xsd 에 있는 스키마 정의 파일을 참조하여 XML에 표시되는 요소를 확인합니다.

표 A.4. 작업자 속성

속성Default설명

io-threads

 

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

stack-size

0

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

task-keepalive

60000

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

task-core-threads

2

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

task-max-threads

 

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

표 A.5. buffer-pool 속성

속성Default설명
참고

IO 버퍼 풀은 더 이상 사용되지 않지만 현재 릴리스에서는 기본값으로 설정되어 있습니다. Undertow 바이트 버퍼 풀 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 바이트 버퍼 풀 구성 섹션을 참조하십시오. 또한 바이트 버퍼 풀 특성 목록에 대한 JBoss EAP 구성 가이드 의 바이트 버퍼 풀 속성(Byte Buffer Pool Attributes )을 참조하십시오.

buffer-size

 

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

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

이 속성에 대한 성능 튜닝 조언은 버퍼 풀 구성을 참조하십시오.

buffers-per-slice

 

큰 버퍼를 로 나눌 슬라이스 또는 섹션 수는 몇 개입니까. 이 방법은 여러 별도의 버퍼를 할당하는 것보다 메모리가 더 효율적일 수 있습니다. 지정하지 않으면 시스템의 사용 가능한 RAM 수를 기반으로 슬라이스 수가 설정됩니다.

  • 10 (128MB 미만 RAM)
  • 128MB 이상의 RAM의 경우 20

직접 버퍼

 

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





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

법적 공지

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.